Răsfoiți Sursa

tm: free new tm cell in case of error if it was not referenced

- part of t_uac_prepare(), reported by GH #1554
Daniel-Constantin Mierla 7 ani în urmă
părinte
comite
f947708400
1 a modificat fișierele cu 11 adăugiri și 4 ștergeri
  1. 11 4
      src/modules/tm/uac.c

+ 11 - 4
src/modules/tm/uac.c

@@ -583,11 +583,18 @@ static inline int t_uac_prepare(uac_req_t *uac_r,
 
 
 error2:
 error2:
 #ifdef TM_DEL_UNREF
 #ifdef TM_DEL_UNREF
-	if (!is_ack) {
-		UNREF_FREE(new_cell);
-	}else
-#endif
+	if (is_ack) {
 		free_cell(new_cell);
 		free_cell(new_cell);
+	} else {
+		if(atomic_get_int(&new_cell->ref_count)==0) {
+			free_cell(new_cell);
+		} else {
+			UNREF_FREE(new_cell);
+		}
+	}
+#else
+	free_cell(new_cell);
+#endif
 error3:
 error3:
 	return ret;
 	return ret;
 }
 }