[sr-dev] git:master:6d157a4a: presence: remove transaction creation from publ_notify_notifier() and mark_presentity_for_delete()

Victor Seva linuxmaniac at torreviejawireless.org
Thu Feb 2 12:43:57 CET 2017


Module: kamailio
Branch: master
Commit: 6d157a4af708108b90a338614869de0ceeb94b68
URL: https://github.com/kamailio/kamailio/commit/6d157a4af708108b90a338614869de0ceeb94b68

Author: Victor Seva <linuxmaniac at torreviejawireless.org>
Committer: Victor Seva <linuxmaniac at torreviejawireless.org>
Date: 2017-02-02T12:43:53+01:00

presence: remove transaction creation from publ_notify_notifier() and mark_presentity_for_delete()

* publ_notify_notifier() and mark_presentity_for_delete() are
  called inside a already created transaction
* adding transaction handle for msg_presentity_clean()

fix #960

---

Modified: src/modules/presence/notify.c
Modified: src/modules/presence/presentity.c
Modified: src/modules/presence/publish.c

---

Diff:  https://github.com/kamailio/kamailio/commit/6d157a4af708108b90a338614869de0ceeb94b68.diff
Patch: https://github.com/kamailio/kamailio/commit/6d157a4af708108b90a338614869de0ceeb94b68.patch

---

diff --git a/src/modules/presence/notify.c b/src/modules/presence/notify.c
index caf5a3d..e5cd1cd 100644
--- a/src/modules/presence/notify.c
+++ b/src/modules/presence/notify.c
@@ -1363,15 +1363,6 @@ int publ_notify_notifier(str pres_uri, pres_ev_t *event)
 	result_cols[r_to_tag_col=n_result_cols++] = &str_to_tag_col;
 	result_cols[r_from_tag_col=n_result_cols++] = &str_from_tag_col;
 
-	if (pa_dbf.start_transaction)
-	{
-		if (pa_dbf.start_transaction(pa_db, db_table_lock) < 0)
-		{
-			LM_ERR("in start_transaction\n");
-			goto error;
-		}
-	}
-
 	if(query_fn(pa_db, query_cols, 0, query_vals, result_cols,
 				n_query_cols, n_result_cols, 0, &result )< 0)
 	{
@@ -1400,26 +1391,11 @@ int publ_notify_notifier(str pres_uri, pres_ev_t *event)
 		set_updated(&subs);
 	}
 
-	if (pa_dbf.end_transaction)
-	{
-		if (pa_dbf.end_transaction(pa_db) < 0)
-		{
-			LM_ERR("in end_transaction\n");
-			goto error;
-		}
-	}
-
 	ret = RES_ROW_N(result);
 
 error:
 	if (result) pa_dbf.free_result(pa_db, result);
 
-	if (pa_dbf.abort_transaction)
-	{
-		if (pa_dbf.abort_transaction(pa_db) < 0)
-			LM_ERR("in abort_transaction\n");
-	}
-
 	return ret;
 }
 
diff --git a/src/modules/presence/presentity.c b/src/modules/presence/presentity.c
index 87d1ac7..9755c4f 100644
--- a/src/modules/presence/presentity.c
+++ b/src/modules/presence/presentity.c
@@ -1568,15 +1568,6 @@ int mark_presentity_for_delete(presentity_t *pres)
 
 	result_cols[0] = &str_body_col;
 
-	if (pa_dbf.start_transaction)
-	{
-		if (pa_dbf.start_transaction(pa_db, db_table_lock) < 0)
-		{
-			LM_ERR("in start_transaction\n");
-			goto error;
-		}
-	}
-
 	if (query_fn(pa_db, query_cols, 0, query_vals, result_cols,
 				n_query_cols, 1, 0, &result) < 0)
 	{
@@ -1657,15 +1648,6 @@ int mark_presentity_for_delete(presentity_t *pres)
 		goto error;
 	}
 
-	if (pa_dbf.end_transaction)
-	{
-		if (pa_dbf.end_transaction(pa_db) < 0)
-		{
-			LM_ERR("in end_transaction\n");
-			goto error;
-		}
-	}
-
 	if (pa_dbf.affected_rows)
 		ret = pa_dbf.affected_rows(pa_db);
 	else
@@ -1677,12 +1659,6 @@ int mark_presentity_for_delete(presentity_t *pres)
 	if (cur_body) pkg_free(cur_body);
 	if (result) pa_dbf.free_result(pa_db, result);
 
-	if (pa_dbf.abort_transaction)
-	{
-		if (pa_dbf.abort_transaction(pa_db) < 0)
-			LM_ERR("in abort_transaction\n");
-	}
-
 	return ret;
 }
 
diff --git a/src/modules/presence/publish.c b/src/modules/presence/publish.c
index b2186cd..65e5154 100644
--- a/src/modules/presence/publish.c
+++ b/src/modules/presence/publish.c
@@ -164,9 +164,22 @@ void msg_presentity_clean(unsigned int ticks,void *param)
 			}
 			else if (pres_notifier_processes > 0)
 			{
+				if (pa_dbf.start_transaction)
+				{
+					if (pa_dbf.start_transaction(pa_db, db_table_lock) < 0)
+					{
+						LM_ERR("in start_transaction\n");
+						goto error;
+					}
+				}
 				if ((num_watchers = publ_notify_notifier(uri, pres.event)) < 0)
 				{
 					LM_ERR("Updating watcher records\n");
+					if (pa_dbf.abort_transaction)
+					{
+						if (pa_dbf.abort_transaction(pa_db) < 0)
+							LM_ERR("in abort_transaction\n");
+					}
 					goto error;
 				}
 
@@ -175,6 +188,11 @@ void msg_presentity_clean(unsigned int ticks,void *param)
 					if (mark_presentity_for_delete(&pres) < 0)
 					{
 						LM_ERR("Marking presentity\n");
+						if (pa_dbf.abort_transaction)
+						{
+							if (pa_dbf.abort_transaction(pa_db) < 0)
+								LM_ERR("in abort_transaction\n");
+						}
 						goto error;
 					}
 				}
@@ -186,6 +204,14 @@ void msg_presentity_clean(unsigned int ticks,void *param)
 						goto error;
 					}
 				}
+				if (pa_dbf.end_transaction)
+				{
+					if (pa_dbf.end_transaction(pa_db) < 0)
+					{
+						LM_ERR("in end_transaction\n");
+						goto error;
+					}
+				}
 			}
 			else
 			{




More information about the sr-dev mailing list