Browse code

Merge ad25b30e92a14887995db62262db33ca52225762 into 584ef26d685f381ddb627866400cfde1b0239f06

Victor Seva authored on 01/07/2022 23:35:53 • GitHub committed on 01/07/2022 23:35:53
Showing 1 changed files
... ...
@@ -69,6 +69,7 @@ void ps_presentity_db_timer_clean(unsigned int ticks, void *param)
69 69
 	int n_db_cols = 0, n_result_cols = 0;
70 70
 	int event_col, etag_col, user_col, domain_col;
71 71
 	int i = 0, num_watchers = 0;
72
+	pres_ev_t fake;
72 73
 	presentity_t pres;
73 74
 	str uri = {0, 0}, event, *rules_doc = NULL;
74 75
 	static str query_str;
... ...
@@ -121,6 +122,7 @@ void ps_presentity_db_timer_clean(unsigned int ticks, void *param)
121 122
 		rows = RES_ROWS(result);
122 123
 
123 124
 		for(i = 0; i < RES_ROW_N(result); i++) {
125
+			num_watchers = 0;
124 126
 			values = ROW_VALUES(&rows[i]);
125 127
 			memset(&pres, 0, sizeof(presentity_t));
126 128
 
... ...
@@ -134,28 +136,33 @@ void ps_presentity_db_timer_clean(unsigned int ticks, void *param)
134 136
 			event.len = strlen(event.s);
135 137
 			pres.event = contains_event(&event, NULL);
136 138
 			if(pres.event == NULL || pres.event->evp == NULL) {
137
-				LM_ERR("event not found\n");
138
-				goto error;
139
+				LM_ERR("event[%.*s] not found\n", STR_FMT(&event));
140
+				memset(&fake, 0, sizeof(pres_ev_t));
141
+				fake.name = event;
142
+				pres.event = &fake;
143
+				goto simple_error;
139 144
 			}
140 145
 
141 146
 			if(uandd_to_uri(pres.user, pres.domain, &uri) < 0) {
142
-				LM_ERR("constructing uri\n");
143
-				goto error;
147
+				LM_ERR("constructing uri from [user]=%.*s  [domain]=%.*s\n",
148
+					STR_FMT(&pres.user), STR_FMT(&pres.domain));
149
+				goto simple_error;
144 150
 			}
145 151
 
146 152
 			/* delete from hash table */
147 153
 			if(publ_cache_mode==PS_PCACHE_HYBRID
148 154
 					&& delete_phtable(&uri, pres.event->evp->type) < 0) {
149
-				LM_ERR("deleting from presentity hash table\n");
150
-				goto error;
155
+				LM_ERR("deleting uri[%.*s] event[%.*s] from presentity hash table\n",
156
+					STR_FMT(&uri), STR_FMT(&event));
157
+				goto simple_error;
151 158
 			}
152 159
 
153
-			LM_DBG("found expired publish for [user]=%.*s  [domanin]=%.*s\n",
160
+			LM_DBG("found expired publish for [user]=%.*s  [domain]=%.*s\n",
154 161
 					pres.user.len, pres.user.s, pres.domain.len, pres.domain.s);
155 162
 
156 163
 			if(pres_force_delete == 1) {
157 164
 				if(delete_presentity(&pres, NULL) < 0) {
158
-					LM_ERR("Deleting presentity\n");
165
+					LM_ERR("Deleting presentity uri[%.*s]\n", STR_FMT(&uri));
159 166
 					goto error;
160 167
 				}
161 168
 			} else if(pres_notifier_processes > 0) {
... ...
@@ -171,7 +178,7 @@ void ps_presentity_db_timer_clean(unsigned int ticks, void *param)
171 178
 						if(pa_dbf.abort_transaction(pa_db) < 0)
172 179
 							LM_ERR("in abort_transaction\n");
173 180
 					}
174
-					goto error;
181
+					goto next;
175 182
 				}
176 183
 
177 184
 				if(num_watchers > 0) {
... ...
@@ -181,12 +188,12 @@ void ps_presentity_db_timer_clean(unsigned int ticks, void *param)
181 188
 							if(pa_dbf.abort_transaction(pa_db) < 0)
182 189
 								LM_ERR("in abort_transaction\n");
183 190
 						}
184
-						goto error;
191
+						goto next;
185 192
 					}
186 193
 				} else {
187 194
 					if(delete_presentity(&pres, NULL) < 0) {
188
-						LM_ERR("Deleting presentity\n");
189
-						goto error;
195
+						LM_ERR("Deleting presentity uri[%.*s]\n", STR_FMT(&uri));
196
+						goto next;
190 197
 					}
191 198
 				}
192 199
 				if(pa_dbf.end_transaction) {
... ...
@@ -201,22 +208,30 @@ void ps_presentity_db_timer_clean(unsigned int ticks, void *param)
201 208
 								   &pres.user, &pres.domain, &rules_doc)
202 209
 								   < 0) {
203 210
 					LM_ERR("getting rules doc\n");
204
-					goto error;
211
+					goto simple_error;
205 212
 				}
206 213
 				if(publ_notify(&pres, uri, NULL, &pres.etag, rules_doc) < 0) {
207 214
 					LM_ERR("sending Notify request\n");
208
-					goto error;
209
-				}
210
-				if(rules_doc) {
211
-					if(rules_doc->s)
212
-						pkg_free(rules_doc->s);
213
-					pkg_free(rules_doc);
214
-					rules_doc = NULL;
215
+					goto simple_error;
215 216
 				}
216 217
 			}
217 218
 
218
-			pkg_free(uri.s);
219
-			uri.s = NULL;
219
+simple_error:
220
+			if(num_watchers == 0 && delete_presentity(&pres, NULL) < 0) {
221
+				LM_ERR("Deleting presentity\n");
222
+			}
223
+next:
224
+			if(uri.s) {
225
+				pkg_free(uri.s);
226
+				uri.s = NULL;
227
+			}
228
+			if(rules_doc) {
229
+				if(rules_doc->s) {
230
+					pkg_free(rules_doc->s);
231
+				}
232
+				pkg_free(rules_doc);
233
+				rules_doc = NULL;
234
+			}
220 235
 		}
221 236
 	} while(db_fetch_next(&pa_dbf, pres_fetch_rows, pa_db, &result) == 1
222 237
 			&& RES_ROW_N(result) > 0);
... ...
@@ -277,22 +292,23 @@ void ps_ptable_timer_clean(unsigned int ticks, void *param)
277 292
 		pres.etag = ptn->etag;
278 293
 		pres.event = contains_event(&ptn->event, NULL);
279 294
 		if(pres.event == NULL || pres.event->evp == NULL) {
280
-			LM_ERR("event not found\n");
281
-			goto error;
295
+			LM_ERR("event[%.*s] not found\n", STR_FMT(&ptn->event));
296
+			goto next;
282 297
 		}
283 298
 
284 299
 		if(uandd_to_uri(pres.user, pres.domain, &uri) < 0) {
285
-			LM_ERR("constructing uri\n");
286
-			goto error;
300
+			LM_ERR("constructing uri from [user]=%.*s  [domain]=%.*s\n",
301
+				STR_FMT(&pres.user), STR_FMT(&pres.domain));
302
+			goto next;
287 303
 		}
288 304
 
289
-		LM_DBG("found expired publish for [user]=%.*s  [domanin]=%.*s\n",
305
+		LM_DBG("found expired publish for [user]=%.*s  [domain]=%.*s\n",
290 306
 				pres.user.len, pres.user.s, pres.domain.len, pres.domain.s);
291 307
 
292 308
 		if(pres_force_delete == 1) {
293 309
 			if(ps_ptable_remove(ptn) <0) {
294 310
 				LM_ERR("Deleting presentity\n");
295
-				goto error;
311
+				goto next;
296 312
 			}
297 313
 		} else {
298 314
 			if(pres.event->get_rules_doc
... ...
@@ -300,25 +316,28 @@ void ps_ptable_timer_clean(unsigned int ticks, void *param)
300 316
 								&pres.user, &pres.domain, &rules_doc)
301 317
 								< 0) {
302 318
 				LM_ERR("getting rules doc\n");
303
-				goto error;
319
+				goto next;
304 320
 			}
305 321
 			if(publ_notify(&pres, uri, NULL, &pres.etag, rules_doc) < 0) {
306 322
 				LM_ERR("sending Notify request\n");
307
-				goto error;
308
-			}
309
-			if(rules_doc) {
310
-				if(rules_doc->s)
311
-					pkg_free(rules_doc->s);
312
-				pkg_free(rules_doc);
313
-				rules_doc = NULL;
323
+				goto next;
314 324
 			}
315 325
 		}
316 326
 
317
-		pkg_free(uri.s);
318
-		uri.s = NULL;
327
+next:
328
+		if(uri.s) {
329
+			pkg_free(uri.s);
330
+			uri.s = NULL;
331
+		}
332
+		if(rules_doc) {
333
+			if(rules_doc->s) {
334
+				pkg_free(rules_doc->s);
335
+			}
336
+			pkg_free(rules_doc);
337
+			rules_doc = NULL;
338
+		}
319 339
 	}
320 340
 
321
-error:
322 341
 	for(ptn = ptlist; ptn != NULL; ptn = ptn->next) {
323 342
 		if(ps_ptable_remove(ptn) <0) {
324 343
 			LM_ERR("failed deleting presentity item\n");