diff options
| author | Quentin Young <qlyoung@cumulusnetworks.com> | 2017-04-24 22:33:25 +0000 | 
|---|---|---|
| committer | Quentin Young <qlyoung@cumulusnetworks.com> | 2017-05-09 20:44:19 +0000 | 
| commit | ffa2c8986d204f4a3e7204258fd6906af4a57c93 (patch) | |
| tree | 6242b8634bc2a264339a05dcfb20b94f63c252f4 /ldpd/ldpe.c | |
| parent | 7a78dea34d20e44539ccabb1b97e029003be4b40 (diff) | |
*: remove THREAD_ON macros, add nullity check
The way thread.c is written, a caller who wishes to be able to cancel a
thread or avoid scheduling it twice must keep a reference to the thread.
Typically this is done with a long lived pointer whose value is checked
for null in order to know if the thread is currently scheduled.  The
check-and-schedule idiom is so common that several wrapper macros in
thread.h existed solely to provide it.
This patch removes those macros and adds a new parameter to all
thread_add_* functions which is a pointer to the struct thread * to
store the result of a scheduling call. If the value passed is non-null,
the thread will only be scheduled if the value is null. This helps with
consistency.
A Coccinelle spatch has been used to transform code of the form:
  if (t == NULL)
    t = thread_add_* (...)
to the form
  thread_add_* (..., &t)
The THREAD_ON macros have also been transformed to the underlying
thread.c calls.
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'ldpd/ldpe.c')
| -rw-r--r-- | ldpd/ldpe.c | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/ldpd/ldpe.c b/ldpd/ldpe.c index 017eec2502..9f87e58c40 100644 --- a/ldpd/ldpe.c +++ b/ldpd/ldpe.c @@ -120,7 +120,7 @@ ldpe(void)  	imsg_init(&iev_main->ibuf, LDPD_FD_ASYNC);  	iev_main->handler_read = ldpe_dispatch_main;  	iev_main->ev_read = thread_add_read(master, iev_main->handler_read, -	    iev_main, iev_main->ibuf.fd); +				            iev_main, iev_main->ibuf.fd, NULL);  	iev_main->handler_write = ldp_write_handler;  	if ((iev_main_sync = calloc(1, sizeof(struct imsgev))) == NULL) @@ -165,8 +165,8 @@ ldpe_init(struct ldpd_init *init)  #ifdef __OpenBSD__  	global.pfkeysock = pfkey_init();  	if (sysdep.no_pfkey == 0) -		pfkey_ev = thread_add_read(master, ldpe_dispatch_pfkey, -		    NULL, global.pfkeysock); +		pfkey_ev = thread_add_read(master, ldpe_dispatch_pfkey, NULL, +				           global.pfkeysock, NULL);  #endif  	/* mark sockets as closed */ @@ -354,7 +354,10 @@ ldpe_dispatch_main(struct thread *thread)  			imsg_init(&iev_lde->ibuf, fd);  			iev_lde->handler_read = ldpe_dispatch_lde;  			iev_lde->ev_read = thread_add_read(master, -			    iev_lde->handler_read, iev_lde, iev_lde->ibuf.fd); +							   iev_lde->handler_read, +							   iev_lde, +							   iev_lde->ibuf.fd, +							   NULL);  			iev_lde->handler_write = ldp_write_handler;  			iev_lde->ev_write = NULL;  			break; @@ -694,8 +697,8 @@ ldpe_dispatch_pfkey(struct thread *thread)  {  	int	 fd = THREAD_FD(thread); -	pfkey_ev = thread_add_read(master, ldpe_dispatch_pfkey, -	    NULL, global.pfkeysock); +	pfkey_ev = thread_add_read(master, ldpe_dispatch_pfkey, NULL, +				   global.pfkeysock, NULL);  	if (pfkey_read(fd, NULL) == -1)  		fatal("pfkey_read failed, exiting..."); @@ -715,12 +718,15 @@ ldpe_setup_sockets(int af, int disc_socket, int edisc_socket,  	/* discovery socket */  	af_global->ldp_disc_socket = disc_socket;  	af_global->disc_ev = thread_add_read(master, disc_recv_packet, -	    &af_global->disc_ev, af_global->ldp_disc_socket); +					     &af_global->disc_ev, +					     af_global->ldp_disc_socket, NULL);  	/* extended discovery socket */  	af_global->ldp_edisc_socket = edisc_socket;  	af_global->edisc_ev = thread_add_read(master, disc_recv_packet, -	    &af_global->edisc_ev, af_global->ldp_edisc_socket); +					      &af_global->edisc_ev, +					      af_global->ldp_edisc_socket, +					      NULL);  	/* session socket */  	af_global->ldp_session_socket = session_socket;  | 
