mirror of https://github.com/microsoft/vcpkg.git
31 lines
1.1 KiB
Diff
31 lines
1.1 KiB
Diff
diff --git a/json_object.c b/json_object.c
|
|
index 0a61967..71cd25b 100644
|
|
--- a/json_object.c
|
|
+++ b/json_object.c
|
|
@@ -303,6 +303,7 @@ static inline int _json_object_put_maybe_free(struct json_object *jso, int free_
|
|
|
|
if (jso->_user_delete)
|
|
jso->_user_delete(jso, jso->_userdata);
|
|
+ jso->_user_delete = NULL;
|
|
|
|
switch (jso->o_type)
|
|
{
|
|
@@ -435,11 +436,16 @@ int json_object_put(struct json_object *jso)
|
|
// All slots are cleared, now pop back up to the parent
|
|
{
|
|
json_object *parent = jso->_delete_parent;
|
|
+ int rc;
|
|
// jso is a child that's already been detached from its parent
|
|
// so we need to actually free it now
|
|
assert(jso->_ref_count == 0);
|
|
jso->_ref_count++; // We're the exclusive owner of jso, non-atomic add is ok.
|
|
- assert(_json_object_put_maybe_free(jso, 1) == 0);
|
|
+ // Note: the call must not be inside assert(), or it gets
|
|
+ // compiled out when NDEBUG is defined and the memory leaks.
|
|
+ rc = _json_object_put_maybe_free(jso, 1);
|
|
+ assert(rc == 0);
|
|
+ (void)rc;
|
|
jso = parent;
|
|
// iteration will be reset at the top of the loop
|
|
}
|