2
0
Эх сурвалжийг харах

usrloc: keep a private copy of urecord before running ul_callbacks

fixes #2089
Victor Seva 6 жил өмнө
parent
commit
f3cf0a2f4e

+ 9 - 5
src/modules/usrloc/udomain.c

@@ -907,7 +907,7 @@ int udomain_contact_expired_cb(db1_con_t* _c, udomain_t* _d)
 	str user, contact;
 	int i;
 	int n;
-	urecord_t* r;
+	urecord_t r;
 	ucontact_t* c;
 #define RUIDBUF_SIZE 128
 	char ruidbuf[RUIDBUF_SIZE];
@@ -1013,12 +1013,16 @@ int udomain_contact_expired_cb(db1_con_t* _c, udomain_t* _d)
 			}
 
 			lock_udomain(_d, &user);
-			get_static_urecord(_d, &user, &r);
+			/* don't use the same static value from get_static_urecord() */
+			memset( &r, 0, sizeof(struct urecord) );
+			r.aor = user;
+			r.aorhash = ul_get_aorhash(&user);
+			r.domain = _d->name;
 
-			if ( (c=mem_insert_ucontact(r, &contact, ci)) == 0) {
+			if ( (c=mem_insert_ucontact(&r, &contact, ci)) == 0) {
 				LM_ERR("inserting temporary contact failed for %.*s\n",
 						user.len, user.s);
-				release_urecord(r);
+				release_urecord(&r);
 				unlock_udomain(_d, &user);
 				goto error;
 			}
@@ -1041,7 +1045,7 @@ int udomain_contact_expired_cb(db1_con_t* _c, udomain_t* _d)
 							user.len, user.s);
 				}
 			}
-			release_urecord(r);
+			release_urecord(&r);
 			unlock_udomain(_d, &user);
 			if(ruid.len > 0 && ul_xavp_contact_name.s != NULL) {
 				/* delete attributes by ruid */