--- bind-9.3.4-P1/contrib/dbus/dbus_mgr.c.noparallel 2008-02-26 08:35:18.000000000 -0500 +++ bind-9.3.4-P1/contrib/dbus/dbus_mgr.c 2008-02-26 08:40:11.000000000 -0500 @@ -176,6 +176,10 @@ static void dbus_mgr_dbus_shutdown_handler ( ns_dbus_mgr_t * ); +#define BEGIN_EXCLUSIVE(t) \ + do {} while (isc_task_beginexclusive (t) != ISC_R_SUCCESS); +#define END_EXCLUSIVE(t) isc_task_endexclusive (t) + static int dbus_mgr_log_err( const char *fmt, ...) { @@ -454,27 +458,24 @@ static void dbus_mgr_restart_dbus(isc_task_t *t, isc_event_t *ev) -{ +{ + BEGIN_EXCLUSIVE (t); ns_dbus_mgr_t *mgr = (ns_dbus_mgr_t*)(ev->ev_arg) ; - t=t; isc_event_free(&ev); dbus_mgr_log_dbg("attempting to connect to D-BUS"); dbus_mgr_init_dbus( mgr ); + END_EXCLUSIVE (t); } static -void dbus_mgr_handle_dbus_shutdown_event(isc_task_t *t, isc_event_t *ev) +void dbus_mgr_handle_dbus_shutdown_event(ns_dbus_mgr_t *mgr) { - ns_dbus_mgr_t *mgr = ev->ev_arg; isc_time_t tick={10,0}; isc_interval_t tock={10,0}; DBUS_SVC dbus = mgr->dbus; - t = t; mgr->dbus = 0L; - isc_event_free(&ev); - if ( dbus != 0L ) { isc_task_purgerange(mgr->task, 0L, ISC_SOCKEVENT_READ_READY, ISC_SOCKEVENT_SELECTED, 0L); @@ -514,21 +515,8 @@ static void dbus_mgr_dbus_shutdown_handler ( ns_dbus_mgr_t *mgr ) { - isc_event_t *dbus_shutdown_event = - isc_event_allocate - ( mgr->mctx, - mgr->task, - 1, - dbus_mgr_handle_dbus_shutdown_event, - mgr, - sizeof(isc_event_t) - ); - if( dbus_shutdown_event != 0L ) - { - isc_task_purgerange(mgr->task, 0L, ISC_SOCKEVENT_READ_READY, ISC_SOCKEVENT_SELECTED, 0L); - isc_task_send( mgr->task, &dbus_shutdown_event ); - }else - dbus_mgr_log_err("unable to allocate dbus shutdown event"); + isc_task_purgerange(mgr->task, 0L, ISC_SOCKEVENT_READ_READY, ISC_SOCKEVENT_SELECTED, 0L); + dbus_mgr_handle_dbus_shutdown_event (mgr); } static @@ -725,14 +713,8 @@ return ISC_R_NOPERM; /* if configuration does not allow localhost clients, * then we really shouldn't be creating a forwarding table. */ - result = isc_task_beginexclusive(mgr->task); - - if( result == ISC_R_SUCCESS ) - { result = dns_fwdtable_create( mgr->mctx, &(view->fwdtable) ); - isc_task_endexclusive(mgr->task); - if( result != ISC_R_SUCCESS ) return result; @@ -741,7 +723,6 @@ if( isc_log_getdebuglevel(ns_g_lctx) >= 1 ) dbus_mgr_log_info("Created forwarder table."); - } } for( dnsName = ISC_LIST_HEAD(*nameList); @@ -758,10 +739,6 @@ continue; /* no forwarders for name - add forwarders */ - result = isc_task_beginexclusive(mgr->task); - - if( result == ISC_R_SUCCESS ) - { result = dns_fwdtable_add( fwdtable, dnsName, (isc_sockaddrlist_t*)saList, fwdpolicy @@ -770,14 +747,11 @@ if( view != 0L ) dns_view_flushcache( view ); - isc_task_endexclusive(mgr->task); - if( result != ISC_R_SUCCESS ) return result; if( isc_log_getdebuglevel(ns_g_lctx) >= 1 ) dbus_mgr_log_forwarders("Created forwarder",dnsName, saList); - } continue; } @@ -787,26 +761,16 @@ if( isc_log_getdebuglevel(ns_g_lctx) >= 1 ) dbus_mgr_log_forwarders("Deleting forwarder", dnsName, (SockAddrList*)&(fwdr->addrs)); - result = isc_task_beginexclusive(mgr->task); - if( result == ISC_R_SUCCESS ) - { result = dns_fwdtable_delete( fwdtable, dnsName ); if( view != 0L ) dns_view_flushcache( view ); - isc_task_endexclusive(mgr->task); - if( result != ISC_R_SUCCESS ) return result; - } continue; } - result = isc_task_beginexclusive(mgr->task); - - if( result == ISC_R_SUCCESS ) - { fwdr->fwdpolicy = fwdpolicy; if( isc_log_getdebuglevel(ns_g_lctx) >= 1 ) @@ -843,14 +807,8 @@ if( view != 0L ) dns_view_flushcache( view ); - isc_task_endexclusive(mgr->task); - if( isc_log_getdebuglevel(ns_g_lctx) >= 1 ) dbus_mgr_log_forwarders("Added forwarder", dnsName, (SockAddrList*)&(fwdr->addrs)); - - }else - return result; - } return (result); } @@ -2163,30 +2121,32 @@ static void dbus_mgr_read_watch_activated(isc_task_t *t, isc_event_t *ev) { + BEGIN_EXCLUSIVE (t); DBusMgrSocket *sfd = (DBusMgrSocket*)(ev->ev_arg); - t = t; isc_mem_put(sfd->mgr->mctx, ev, ev->ev_size); dbus_mgr_log_dbg("watch %d READ",sfd->fd); isc_socket_fd_handle_reads( sfd->sock, sfd->ser ); dbus_svc_handle_watch( sfd->mgr->dbus, sfd->fd, WATCH_ENABLE | WATCH_READ ); + END_EXCLUSIVE (t); } static void dbus_mgr_write_watch_activated(isc_task_t *t, isc_event_t *ev) { + BEGIN_EXCLUSIVE (t); DBusMgrSocket *sfd = (DBusMgrSocket*)(ev->ev_arg); - t = t; isc_mem_put(sfd->mgr->mctx, ev, ev->ev_size); dbus_mgr_log_dbg("watch %d WRITE",sfd->fd); isc_socket_fd_handle_writes( sfd->sock, sfd->ser ); - dbus_svc_handle_watch( sfd->mgr->dbus, sfd->fd, WATCH_ENABLE | WATCH_WRITE ); + dbus_svc_handle_watch( sfd->mgr->dbus, sfd->fd, WATCH_ENABLE | WATCH_WRITE ); + END_EXCLUSIVE (t); } static void dbus_mgr_watches_selected(isc_task_t *t, isc_event_t *ev) { + BEGIN_EXCLUSIVE (t); ns_dbus_mgr_t *mgr = (ns_dbus_mgr_t*)(ev->ev_arg); - t = t; isc_mem_put(mgr->mctx, ev, ev->ev_size); if( ( mgr->dbus == 0L ) || (mgr->sockets == 0L)) { @@ -2195,6 +2155,7 @@ dbus_mgr_log_dbg("watches selected"); dbus_svc_dispatch( mgr->dbus ); dbus_mgr_log_dbg("dispatch complete"); + END_EXCLUSIVE (t); } static int dbus_mgr_socket_comparator( const void *p1, const void *p2 )