Index: addons/ooh323c/src/ooGkClient.c =================================================================== --- addons/ooh323c/src/ooGkClient.c (revision 355900) +++ addons/ooh323c/src/ooGkClient.c (working copy) @@ -170,23 +170,25 @@ void ooGkClientPrintConfig(ooGkClient *pGkClient) int ooGkClientDestroy(void) { + ooGkClient *pGkClient = gH323ep.gkClient; + if(gH323ep.gkClient) { - if(gH323ep.gkClient->state == GkClientRegistered) + ast_mutex_lock(&pGkClient->Lock); + gH323ep.gkClient = NULL; + if(pGkClient->state == GkClientRegistered) { OOTRACEINFO1("Unregistering from Gatekeeper\n"); - if(ooGkClientSendURQ(gH323ep.gkClient, NULL)!=OO_OK) + if(ooGkClientSendURQ(pGkClient, NULL)!=OO_OK) OOTRACEERR1("Error:Failed to send URQ to gatekeeper\n"); } OOTRACEINFO1("Destroying Gatekeeper Client\n"); - ooGkClientCloseChannel(gH323ep.gkClient); - freeContext(&gH323ep.gkClient->msgCtxt); - freeContext(&gH323ep.gkClient->ctxt); - ast_mutex_lock(&gH323ep.gkClient->Lock); - ast_mutex_unlock(&gH323ep.gkClient->Lock); - ast_mutex_destroy(&gH323ep.gkClient->Lock); - memFreePtr(&gH323ep.ctxt, gH323ep.gkClient); - gH323ep.gkClient = NULL; + ooGkClientCloseChannel(pGkClient); + freeContext(&pGkClient->msgCtxt); + freeContext(&pGkClient->ctxt); + ast_mutex_unlock(&pGkClient->Lock); + ast_mutex_destroy(&pGkClient->Lock); + memFreePtr(&gH323ep.ctxt, pGkClient); } return OO_OK; } Index: addons/chan_ooh323.c =================================================================== --- addons/chan_ooh323.c (revision 355900) +++ addons/chan_ooh323.c (working copy) @@ -2553,12 +2553,27 @@ static struct ooh323_peer *build_peer(const char * static int ooh323_do_reload(void) { + extern OOH323EndPoint gH323ep; + if (gH323Debug) { ast_verbose("--- ooh323_do_reload\n"); } + /* Gatekeeper */ + if (gH323ep.gkClient) { + ooGkClientDestroy(); + } + reload_config(1); + /* Gatekeeper */ + if (gRasGkMode == RasUseSpecificGatekeeper || + gRasGkMode == RasDiscoverGatekeeper) { + ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ? + gGatekeeper : 0, 0); + ooGkClientStart(gH323ep.gkClient); + } + if (gH323Debug) { ast_verbose("+++ ooh323_do_reload\n"); }