diff options
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_acc.c | 5 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_pres.c | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index 37f36ce7..50cab336 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -360,8 +360,11 @@ PJ_DEF(pj_status_t) pjsua_acc_del(pjsua_acc_id acc_id) PJSUA_LOCK(); /* Delete registration */ - if (pjsua_var.acc[acc_id].regc != NULL) + if (pjsua_var.acc[acc_id].regc != NULL) { pjsua_acc_set_registration(acc_id, PJ_FALSE); + pjsip_regc_destroy(pjsua_var.acc[acc_id].regc); + pjsua_var.acc[acc_id].regc = NULL; + } /* Delete server presence subscription */ pjsua_pres_delete_acc(acc_id); diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c index f9f87550..6261583e 100644 --- a/pjsip/src/pjsua-lib/pjsua_pres.c +++ b/pjsip/src/pjsua-lib/pjsua_pres.c @@ -732,6 +732,7 @@ void pjsua_pres_delete_acc(int acc_id) uapres = pjsua_var.acc[acc_id].pres_srv_list.next; + /* Notify all subscribers that we're no longer available */ while (uapres != &acc->pres_srv_list) { pjsip_pres_status pres_status; @@ -753,6 +754,11 @@ void pjsua_pres_delete_acc(int acc_id) uapres = uapres->next; } + /* Clear server presence subscription list because account might be reused + * later. */ + pj_list_init(&acc->pres_srv_list); + + /* Terminate presence publication, if any */ if (acc->publish_sess) { acc->online_status = PJ_FALSE; send_publish(acc_id, PJ_FALSE); |