@@ -466,6 +466,7 @@ static int failover_raise(struct sip_msg *msg, str *ev_name,
466466
467467 cb_param -> evi_params = evi_dup_shm_params (params );
468468 if (!cb_param -> evi_params ) {
469+ lock_release (cur_sock -> lock );
469470 LM_ERR ("Failed to dup evi params in shm\n" );
470471 shm_free (cb_param );
471472 return -1 ;
@@ -616,13 +617,15 @@ static int virtual_raise(struct sip_msg *msg, str* ev_name, evi_reply_sock *sock
616617 LM_ERR ("unable to parse socket %.*s\n" ,
617618 vsock -> current_sock -> sock_str .len ,
618619 vsock -> current_sock -> sock_str .s );
620+ lock_release (rrobin_lock );
619621 return -1 ;
620622 }
621623
622624 if (vsock -> current_sock -> trans_mod -> raise (msg , ev_name ,
623625 vsock -> current_sock -> sock , params , & async_status )) {
624626 LM_ERR ("unable to raise socket %.*s\n" ,
625627 vsock -> current_sock -> sock_str .len , vsock -> current_sock -> sock_str .s );
628+ lock_release (rrobin_lock );
626629 return -1 ;
627630 }
628631
@@ -650,8 +653,10 @@ static void virtual_free(evi_reply_sock *sock) {
650653 lock_get (global_lock );
651654
652655 vsock = (struct virtual_socket * )sock -> params ;
653- if (!vsock )
656+ if (!vsock ) {
657+ lock_release (global_lock );
654658 return ;
659+ }
655660
656661 /* free the list of sockets for this virtual socket */
657662 sub_list = vsock -> list_sockets ;
0 commit comments