Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 6e3f21ce1d62a9e7001f9d653bfca859 > files > 4

bind-9.3.6-20.P1.el5_8.5.src.rpm

--- 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 )