From: Super User Date: Sat, 15 Sep 2007 08:40:29 +0000 (+0200) Subject: fixes for some join-object-release problems X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=commitdiff_plain;h=78f7f22944e2473d66b7d1828b24ee415f04e4d8 fixes for some join-object-release problems --- diff --git a/action.cpp b/action.cpp index 4b3f383..9f9db8e 100644 --- a/action.cpp +++ b/action.cpp @@ -236,6 +236,7 @@ void EndpointAppPBX::action_dialing_internal(void) trace_header("ACTION extension (extension doesn't exist)", DIRECTION_NONE); add_trace("extension", NULL, dialinginfo.id); end_trace(); + release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, 0, 0); new_state(EPOINT_STATE_OUT_DISCONNECT); message_disconnect_port(portlist, CAUSE_UNALLOCATED, LOCATION_PRIVATE_LOCAL, ""); set_tone(portlist, "cause_86"); @@ -248,6 +249,7 @@ void EndpointAppPBX::action_dialing_internal(void) add_trace("extension", NULL, dialinginfo.id); end_trace(); new_state(EPOINT_STATE_OUT_DISCONNECT); + release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, 0, 0); message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); set_tone(portlist, "cause_81"); return; @@ -382,7 +384,7 @@ void EndpointAppPBX::action_dialing_external(void) { trace_header("ACTION extern (calling denied)", DIRECTION_NONE); end_trace(); - release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0); + release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, 0, 0); set_tone(portlist, "cause_82"); denied: message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); @@ -399,7 +401,7 @@ void EndpointAppPBX::action_dialing_external(void) { trace_header("ACTION extern (national calls denied)", DIRECTION_NONE); end_trace(); - release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0); + release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, 0, 0); set_tone(portlist, "cause_83"); goto denied; } @@ -413,7 +415,7 @@ void EndpointAppPBX::action_dialing_external(void) { trace_header("ACTION extern (international calls denied)", DIRECTION_NONE); end_trace(); - release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0); + release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, 0, 0); set_tone(portlist, "cause_84"); goto denied; } @@ -2292,7 +2294,7 @@ void EndpointAppPBX::process_dialing(void) release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); goto end; } - release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, 0); + release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, 0, 0); e_action = e_action->next; if (!e_action) { diff --git a/admin_client.c b/admin_client.c index 9baad71..65937e0 100644 --- a/admin_client.c +++ b/admin_client.c @@ -1626,9 +1626,11 @@ int main(int argc, char *argv[]) case MODE_TESTCALL: ret = admin_testcall(sock, argc, argv); + break; case MODE_TRACE: ret = admin_trace(sock, argc, argv); + break; } close(sock); diff --git a/admin_server.c b/admin_server.c index c42f25f..419d2ec 100644 --- a/admin_server.c +++ b/admin_server.c @@ -1153,7 +1153,7 @@ int admin_handle(void) if (epoint) { ((class DEFAULT_ENDPOINT_APP *)epoint->ep_app)-> - release(RELEASE_ALL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, 0, 0); + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); } } diff --git a/joinpbx.cpp b/joinpbx.cpp index 750705f..ec03dc5 100644 --- a/joinpbx.cpp +++ b/joinpbx.cpp @@ -855,6 +855,12 @@ void JoinPBX::message_epoint(unsigned long epoint_id, int message_type, union pa break; case RELATION_TYPE_CALLING: /* by calling */ + /* remove us, if we don't have a called releation yet */ + if (!j_relation->next) + { + release(j_relation, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + return; // must return, because join IS destroyed + } /* remove all relations that are in called */ release_again2: reltemp = j_relation;