mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 03:47:47 +00:00
bgpd: use stop event instead of pthread_kill()
When terminating I/O thread, just schedule an event to do any necessary cleanup and gracefully exit instead of using a signal. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
51abb4b49f
commit
48e5262f64
@ -84,14 +84,23 @@ void *bgp_io_start(void *arg)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int bgp_io_finish(struct thread *thread)
|
||||||
|
{
|
||||||
|
/* if we ever have resources to clean up, that code should be placed in
|
||||||
|
* a pthread_cleanup handler and called from here */
|
||||||
|
|
||||||
|
/* set stop flag */
|
||||||
|
atomic_store_explicit(&bgp_io_thread_run, false, memory_order_relaxed);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int bgp_io_stop(void **result, struct frr_pthread *fpt)
|
int bgp_io_stop(void **result, struct frr_pthread *fpt)
|
||||||
{
|
{
|
||||||
|
/* schedule stop job */
|
||||||
|
thread_add_event(fpt->master, &bgp_io_finish, NULL, 0, NULL);
|
||||||
|
|
||||||
bgp_io_thread_run = false;
|
/* join */
|
||||||
/* let the loop break */
|
|
||||||
fpt->master->spin = false;
|
|
||||||
/* break poll */
|
|
||||||
pthread_kill(fpt->thread, SIGINT);
|
|
||||||
pthread_join(fpt->thread, result);
|
pthread_join(fpt->thread, result);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user