deadlock fixed

This commit is contained in:
mom040267 2014-10-25 07:05:06 +00:00
parent 4d700ef90a
commit f65711493c
5 changed files with 16 additions and 13 deletions

View File

@ -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 <mom040267@gmail.com>
Version 4.2.1.2 'Monza':

View File

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

View File

@ -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,

View File

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

View File

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