Merge pull request #3463 from mjstapp/zserv_event

zebra: make incoming zserv message-processing a singleton event
This commit is contained in:
Donald Sharp 2018-12-14 10:02:33 -05:00 committed by GitHub
commit 681c5c2b29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 2 deletions

View File

@ -492,8 +492,8 @@ static int zserv_process_messages(struct thread *thread)
struct zserv *client = THREAD_ARG(thread);
struct stream *msg;
struct stream_fifo *cache = stream_fifo_new();
uint32_t p2p = zebrad.packets_to_process;
bool need_resched = false;
pthread_mutex_lock(&client->ibuf_mtx);
{
@ -505,6 +505,12 @@ static int zserv_process_messages(struct thread *thread)
}
msg = NULL;
/* Need to reschedule processing work if there are still
* packets in the fifo.
*/
if (stream_fifo_head(client->ibuf_fifo))
need_resched = true;
}
pthread_mutex_unlock(&client->ibuf_mtx);
@ -516,6 +522,10 @@ static int zserv_process_messages(struct thread *thread)
stream_fifo_free(cache);
/* Reschedule ourselves if necessary */
if (need_resched)
zserv_event(client, ZSERV_PROCESS_MESSAGES);
return 0;
}
@ -628,6 +638,7 @@ void zserv_close_client(struct zserv *client)
thread_cancel_event(zebrad.master, client);
THREAD_OFF(client->t_cleanup);
THREAD_OFF(client->t_process);
/* destroy pthread */
frr_pthread_destroy(client->pthread);
@ -828,7 +839,7 @@ void zserv_event(struct zserv *client, enum zserv_event event)
break;
case ZSERV_PROCESS_MESSAGES:
thread_add_event(zebrad.master, zserv_process_messages, client,
0, NULL);
0, &client->t_process);
break;
case ZSERV_HANDLE_CLIENT_FAIL:
thread_add_event(zebrad.master, zserv_handle_client_fail,

View File

@ -73,6 +73,9 @@ struct zserv {
struct thread *t_read;
struct thread *t_write;
/* Event for message processing, for the main pthread */
struct thread *t_process;
/* Threads for the main pthread */
struct thread *t_cleanup;