From 15952e46fbe30378ea7c10672b719325e0d44a07 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 25 Jun 2013 10:36:22 +0200 Subject: [PATCH] Use unref instead of explicit delete for presence objects. --- coreapi/friend.c | 4 ++-- coreapi/linphonecall.c | 2 +- coreapi/linphonecore.c | 4 ++-- coreapi/linphonepresence.h | 6 ------ coreapi/presence.c | 35 +++++++++++++++++++---------------- 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/coreapi/friend.c b/coreapi/friend.c index 9e535152c..80549e4f2 100644 --- a/coreapi/friend.c +++ b/coreapi/friend.c @@ -260,7 +260,7 @@ void linphone_friend_destroy(LinphoneFriend *lf){ sal_op_release(lf->outsub); lf->outsub=NULL; } - if (lf->presence != NULL) linphone_presence_model_delete(lf->presence); + if (lf->presence != NULL) linphone_presence_model_unref(lf->presence); if (lf->uri!=NULL) linphone_address_destroy(lf->uri); if (lf->info!=NULL) buddy_info_free(lf->info); ms_free(lf); @@ -379,7 +379,7 @@ void linphone_friend_apply(LinphoneFriend *fr, LinphoneCore *lc){ case LinphoneSPWait: model = linphone_presence_model_new_with_activity(LinphonePresenceActivityOther, "Waiting for user acceptance"); linphone_friend_notify(fr,model); - linphone_presence_model_delete(model); + linphone_presence_model_unref(model); break; case LinphoneSPAccept: if (fr->lc!=NULL) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index a51001b3f..dd63fdb0a 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -426,7 +426,7 @@ static void linphone_call_init_common(LinphoneCall *call, LinphoneAddress *from, call->owns_call_log=TRUE; model = linphone_presence_model_new_with_activity(LinphonePresenceActivityOnThePhone, NULL); linphone_core_notify_all_friends(call->core,model); - linphone_presence_model_delete(model); + linphone_presence_model_unref(model); linphone_core_get_audio_port_range(call->core, &min_port, &max_port); if (min_port == max_port) { /* Used fixed RTP audio port. */ diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 9d1121c60..8c79e75d4 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -3713,7 +3713,7 @@ void linphone_core_set_presence_model(LinphoneCore *lc, int minutes_away, const linphone_core_send_publish(lc,presence); if ((lc->presence_model != NULL) && (lc->presence_model != presence)) { - linphone_presence_model_delete(lc->presence_model); + linphone_presence_model_unref(lc->presence_model); lc->presence_model = presence; } } @@ -5457,7 +5457,7 @@ void ui_config_uninit(LinphoneCore* lc) lc->friends=NULL; } if (lc->presence_model) { - linphone_presence_model_delete(lc->presence_model); + linphone_presence_model_unref(lc->presence_model); lc->presence_model = NULL; } } diff --git a/coreapi/linphonepresence.h b/coreapi/linphonepresence.h index 7b7c66f4f..c9624bcd9 100644 --- a/coreapi/linphonepresence.h +++ b/coreapi/linphonepresence.h @@ -208,12 +208,6 @@ LINPHONE_PUBLIC LinphonePresenceModel * linphone_presence_model_new_with_activit */ LINPHONE_PUBLIC LinphonePresenceModel * linphone_presence_model_new_with_activity_and_note(LinphonePresenceActivityType activity, const char *description, const char *note, const char *lang); -/** - * @brief Deletes a presence model. - * @param[in] model The #LinphonePresenceModel object to delete. - */ -LINPHONE_PUBLIC void linphone_presence_model_delete(LinphonePresenceModel *model); - /** * Increase the reference count of the #LinphonePresenceModel object. * @param[in] model The #LinphonePresenceModel object for which the reference count is to be increased. diff --git a/coreapi/presence.c b/coreapi/presence.c index ddd65b515..52289d85b 100644 --- a/coreapi/presence.c +++ b/coreapi/presence.c @@ -185,7 +185,7 @@ static void presence_service_delete(struct _LinphonePresenceService *service) { if (service->contact != NULL) { ms_free(service->contact); } - ms_list_for_each(service->notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(service->notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(service->notes); ms_free(service); }; @@ -204,6 +204,7 @@ static void presence_service_add_note(struct _LinphonePresenceService *service, static struct _LinphonePresenceActivity * presence_activity_new(LinphonePresenceActivityType acttype, const char *description) { struct _LinphonePresenceActivity *act = ms_new0(struct _LinphonePresenceActivity, 1); + act->refcnt = 1; act->type = acttype; if (description != NULL) { act->description = ms_strdup(description); @@ -266,11 +267,11 @@ static void presence_person_delete(struct _LinphonePresencePerson *person) { if (person->id != NULL) { ms_free(person->id); } - ms_list_for_each(person->activities, (MSIterateFunc)presence_activity_delete); + ms_list_for_each(person->activities, (MSIterateFunc)linphone_presence_activity_unref); ms_list_free(person->activities); - ms_list_for_each(person->activities_notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(person->activities_notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(person->activities_notes); - ms_list_for_each(person->notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(person->notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(person->notes); ms_free(person); } @@ -288,7 +289,7 @@ static void presence_person_add_note(struct _LinphonePresencePerson *person, str } static void presence_person_clear_activities(struct _LinphonePresencePerson *person) { - ms_list_for_each(person->activities, (MSIterateFunc)presence_activity_delete); + ms_list_for_each(person->activities, (MSIterateFunc)linphone_presence_activity_unref); ms_list_free(person->activities); person->activities = NULL; } @@ -424,7 +425,9 @@ static bool_t presence_person_equals(const struct _LinphonePresencePerson *p1, c } LinphonePresenceModel * linphone_presence_model_new(void) { - return ms_new0(LinphonePresenceModel, 1); + LinphonePresenceModel *model = ms_new0(LinphonePresenceModel, 1); + model->refcnt = 1; + return model; } LinphonePresenceModel * linphone_presence_model_new_with_activity(LinphonePresenceActivityType acttype, const char *description) { @@ -444,14 +447,14 @@ LinphonePresenceModel * linphone_presence_model_new_with_activity_and_note(Linph return model; } -void linphone_presence_model_delete(LinphonePresenceModel *model) { +static void presence_model_delete(LinphonePresenceModel *model) { if (model == NULL) return; ms_list_for_each(model->services, (MSIterateFunc)presence_service_delete); ms_list_free(model->services); ms_list_for_each(model->persons, (MSIterateFunc)presence_person_delete); ms_list_free(model->persons); - ms_list_for_each(model->notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(model->notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(model->notes); ms_free(model); } @@ -464,7 +467,7 @@ LinphonePresenceModel * linphone_presence_model_ref(LinphonePresenceModel *model LinphonePresenceModel * linphone_presence_model_unref(LinphonePresenceModel *model) { model->refcnt--; if (model->refcnt == 0) { - linphone_presence_model_delete(model); + presence_model_delete(model); return NULL; } return model; @@ -734,16 +737,16 @@ int linphone_presence_model_add_note(LinphonePresenceModel *model, const char *n } static void clear_presence_person_notes(struct _LinphonePresencePerson *person) { - ms_list_for_each(person->activities_notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(person->activities_notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(person->activities_notes); person->activities_notes = NULL; - ms_list_for_each(person->notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(person->notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(person->notes); person->notes = NULL; } static void clear_presence_service_notes(struct _LinphonePresenceService *service) { - ms_list_for_each(service->notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(service->notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(service->notes); service->notes = NULL; } @@ -754,7 +757,7 @@ int linphone_presence_model_clear_notes(LinphonePresenceModel *model) { ms_list_for_each(model->persons, (MSIterateFunc)clear_presence_person_notes); ms_list_for_each(model->services, (MSIterateFunc)clear_presence_service_notes); - ms_list_for_each(model->notes, (MSIterateFunc)presence_note_delete); + ms_list_for_each(model->notes, (MSIterateFunc)linphone_presence_note_unref); ms_list_free(model->notes); model->notes = NULL; @@ -1228,7 +1231,7 @@ static LinphonePresenceModel * process_pidf_xml_presence_notification(xmlparsing } if (err < 0) { - linphone_presence_model_delete(model); + linphone_presence_model_unref(model); model = NULL; } @@ -1669,7 +1672,7 @@ void linphone_notify_recv(LinphoneCore *lc, SalOp *op, SalSubscribeStatus ss, Sa ms_message("We are notified that [%s] has presence [%s]", tmp, activity_str); if (activity_str != NULL) ms_free(activity_str); if (lf->presence != NULL) { - linphone_presence_model_delete(lf->presence); + linphone_presence_model_unref(lf->presence); } lf->presence = presence; lf->subscribe_active=TRUE; @@ -1678,7 +1681,7 @@ void linphone_notify_recv(LinphoneCore *lc, SalOp *op, SalSubscribeStatus ss, Sa ms_free(tmp); }else{ ms_message("But this person is not part of our friend list, so we don't care."); - linphone_presence_model_delete(presence); + linphone_presence_model_unref(presence); } if (ss==SalSubscribeTerminated){ sal_op_release(op);