Don't perform reference counting on true, false and null
authorPetri Lehtinen <petri@digip.org>
Mon, 7 Sep 2009 18:40:14 +0000 (21:40 +0300)
committerPetri Lehtinen <petri@digip.org>
Mon, 7 Sep 2009 18:40:14 +0000 (21:40 +0300)
This makes their constructors thread safe. A special reference count
-1 is used to test whether to perform reference counting on a value or
not.

src/jansson.h
src/value.c

index 3aa10de..2e8582b 100644 (file)
@@ -54,7 +54,7 @@ json_t *json_null(void);
 
 static inline json_t *json_incref(json_t *json)
 {
-    if(json)
+    if(json && json->refcount != (unsigned int)-1)
         ++json->refcount;
     return json;
 }
@@ -64,7 +64,7 @@ void json_delete(json_t *json);
 
 static inline void json_decref(json_t *json)
 {
-    if(json && --json->refcount == 0)
+    if(json && json->refcount != (unsigned int)-1 && --json->refcount == 0)
         json_delete(json);
 }
 
index c84bfd3..29f787c 100644 (file)
@@ -431,9 +431,9 @@ json_t *json_true(void)
 {
     static json_t the_true = {
         .type = JSON_TRUE,
-        .refcount = 1
+        .refcount = (unsigned int)1
     };
-    return json_incref(&the_true);
+    return &the_true;
 }
 
 
@@ -441,9 +441,9 @@ json_t *json_false(void)
 {
     static json_t the_false = {
         .type = JSON_FALSE,
-        .refcount = 1
+        .refcount = (unsigned int)1
     };
-    return json_incref(&the_false);
+    return &the_false;
 }
 
 
@@ -451,9 +451,9 @@ json_t *json_null(void)
 {
     static json_t the_null = {
         .type = JSON_NULL,
-        .refcount = 1
+        .refcount = (unsigned int)1
     };
-    return json_incref(&the_null);
+    return &the_null;
 }