From f65711493c2bf2f58becb27d32bc2baac10b9616 Mon Sep 17 00:00:00 2001 From: mom040267 Date: Sat, 25 Oct 2014 07:05:06 +0000 Subject: [PATCH] deadlock fixed --- ChangeLog | 1 - src/apps/relay/netengine.c | 8 ++++---- src/apps/relay/ns_ioalib_engine_impl.c | 12 ++++++------ src/apps/relay/turncli.c | 4 ++-- src/ns_turn_defs.h | 4 ++++ 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 526c68a..05c32ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,7 +4,6 @@ Version 4.2.1.4 'Monza': - TCP/TLS tests extended. - relay RTCP sockets ports allocation fixed. - list of libraries cleaned. - - TCP bufferevent concurrency fixed. 10/05/2014 Oleg Moskalenko Version 4.2.1.2 'Monza': diff --git a/src/apps/relay/netengine.c b/src/apps/relay/netengine.c index 4e057f5..e8c44d9 100644 --- a/src/apps/relay/netengine.c +++ b/src/apps/relay/netengine.c @@ -1006,7 +1006,7 @@ static void setup_listener(void) { struct bufferevent *pair[2]; - bufferevent_pair_new(turn_params.listener.event_base, BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE, pair); + bufferevent_pair_new(turn_params.listener.event_base, TURN_BUFFEREVENTS_OPTIONS, pair); turn_params.listener.in_buf = pair[0]; turn_params.listener.out_buf = pair[1]; bufferevent_setcb(turn_params.listener.in_buf, listener_receive_message, NULL, NULL, &turn_params.listener); @@ -1569,13 +1569,13 @@ static void setup_relay_server(struct relay_server *rs, ioa_engine_handle e, int ioa_engine_set_rtcp_map(rs->ioa_eng, turn_params.listener.rtcpmap); } - bufferevent_pair_new(rs->event_base, BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE, pair); + bufferevent_pair_new(rs->event_base, TURN_BUFFEREVENTS_OPTIONS, pair); rs->in_buf = pair[0]; rs->out_buf = pair[1]; bufferevent_setcb(rs->in_buf, relay_receive_message, NULL, NULL, rs); bufferevent_enable(rs->in_buf, EV_READ); - bufferevent_pair_new(rs->event_base, BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE, pair); + bufferevent_pair_new(rs->event_base, TURN_BUFFEREVENTS_OPTIONS, pair); rs->auth_in_buf = pair[0]; rs->auth_out_buf = pair[1]; bufferevent_setcb(rs->auth_in_buf, relay_receive_auth_message, NULL, NULL, rs); @@ -1678,7 +1678,7 @@ static void* run_auth_server_thread(void *arg) struct bufferevent *pair[2]; - bufferevent_pair_new(turn_params.authserver.event_base, BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE, pair); + bufferevent_pair_new(turn_params.authserver.event_base, TURN_BUFFEREVENTS_OPTIONS, pair); turn_params.authserver.in_buf = pair[0]; turn_params.authserver.out_buf = pair[1]; bufferevent_setcb(turn_params.authserver.in_buf, auth_server_receive_message, NULL, NULL, &turn_params.authserver); diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index b9d0907..e66df80 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -1369,7 +1369,7 @@ ioa_socket_handle ioa_create_connecting_tcp_relay_socket(ioa_socket_handle s, io ret->conn_bev = bufferevent_socket_new(ret->e->event_base, ret->fd, - BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE); + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(ret->conn_bev); bufferevent_setcb(ret->conn_bev, NULL, NULL, connect_eventcb, ret); @@ -2382,7 +2382,7 @@ static int socket_input_worker(ioa_socket_handle s) s->fd, s->ssl, BUFFEREVENT_SSL_ACCEPTING, - BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE); + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(s->bev); bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, eventcb_bev, s); @@ -2398,7 +2398,7 @@ static int socket_input_worker(ioa_socket_handle s) } s->bev = bufferevent_socket_new(s->e->event_base, s->fd, - BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE); + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(s->bev); bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, eventcb_bev, s); @@ -3223,7 +3223,7 @@ int register_callback_on_ioa_socket(ioa_engine_handle e, ioa_socket_handle s, in } else { s->bev = bufferevent_socket_new(s->e->event_base, s->fd, - BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE); + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(s->bev); bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, eventcb_bev, s); @@ -3248,14 +3248,14 @@ int register_callback_on_ioa_socket(ioa_engine_handle e, ioa_socket_handle s, in s->fd, s->ssl, BUFFEREVENT_SSL_ACCEPTING, - BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE); + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(s->bev); } else { s->bev = bufferevent_openssl_socket_new(s->e->event_base, s->fd, s->ssl, BUFFEREVENT_SSL_OPEN, - BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE); + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(s->bev); } bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, diff --git a/src/apps/relay/turncli.c b/src/apps/relay/turncli.c index 6012279..0e1f45f 100644 --- a/src/apps/relay/turncli.c +++ b/src/apps/relay/turncli.c @@ -1169,7 +1169,7 @@ static void cliserver_input_handler(struct evconnlistener *l, evutil_socket_t fd clisession->bev = bufferevent_socket_new(cliserver.event_base, fd, - BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE); + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(clisession->bev); bufferevent_setcb(clisession->bev, cli_socket_input_handler_bev, NULL, cli_eventcb_bev, clisession); @@ -1202,7 +1202,7 @@ void setup_cli_thread(void) struct bufferevent *pair[2]; - bufferevent_pair_new(cliserver.event_base, BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE, pair); + bufferevent_pair_new(cliserver.event_base, TURN_BUFFEREVENTS_OPTIONS, pair); cliserver.in_buf = pair[0]; cliserver.out_buf = pair[1]; bufferevent_setcb(cliserver.in_buf, cli_server_receive_message, NULL, NULL, &cliserver); diff --git a/src/ns_turn_defs.h b/src/ns_turn_defs.h index 514359f..9c493ca 100644 --- a/src/ns_turn_defs.h +++ b/src/ns_turn_defs.h @@ -200,6 +200,10 @@ typedef u32bits turn_time_t; }\ } } while(0) +//////////////// Bufferevents ///////////////////// + +#define TURN_BUFFEREVENTS_OPTIONS (BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE | BEV_OPT_UNLOCK_CALLBACKS) + //////////////// KERNEL-LEVEL CHANNEL HANDLERS ///////// #if !defined(TURN_CHANNEL_HANDLER_KERNEL)