project_files/frontlib/util/refcounter.c
changeset 7316 f7b49b2c5d84
parent 7314 6171f0bad318
equal deleted inserted replaced
7314:6171f0bad318 7316:f7b49b2c5d84
    20 #include "refcounter.h"
    20 #include "refcounter.h"
    21 
    21 
    22 #include "logging.h"
    22 #include "logging.h"
    23 
    23 
    24 void flib_retain(int *referenceCountPtr, const char *objName) {
    24 void flib_retain(int *referenceCountPtr, const char *objName) {
    25 	if(!referenceCountPtr || !objName) {
    25 	if(!log_badargs_if2(referenceCountPtr==NULL, objName==NULL)) {
    26 		flib_log_e("null parameter to flib_retain");
       
    27 	} else {
       
    28 		if((*referenceCountPtr)  >= 0) {
    26 		if((*referenceCountPtr)  >= 0) {
    29 			(*referenceCountPtr)++;
    27 			(*referenceCountPtr)++;
    30 			flib_log_d("retaining %s, now %i references", objName, (*referenceCountPtr));
    28 			flib_log_d("retaining %s, now %i references", objName, (*referenceCountPtr));
    31 		}
    29 		}
    32 		if((*referenceCountPtr) < 0) {
    30 		if((*referenceCountPtr) < 0) {
    38 /**
    36 /**
    39  * Returns true if the struct should be freed.
    37  * Returns true if the struct should be freed.
    40  */
    38  */
    41 bool flib_release(int *referenceCountPtr, const char *objName) {
    39 bool flib_release(int *referenceCountPtr, const char *objName) {
    42 	bool result = false;
    40 	bool result = false;
    43 	if(!referenceCountPtr) {
    41 	if(!log_badargs_if2(referenceCountPtr==NULL, objName==NULL)) {
    44 		flib_log_e("null parameter to flib_release");
    42 		if((*referenceCountPtr) > 0) {
    45 	} else if((*referenceCountPtr) > 0) {
    43 			if(--(*referenceCountPtr) == 0) {
    46 		if(--(*referenceCountPtr) == 0) {
    44 				flib_log_d("releasing and destroying %s", objName);
    47 			flib_log_d("releasing and destroying %s", objName);
    45 				result = true;
    48 			result = true;
    46 			} else {
    49 		} else {
    47 				flib_log_d("releasing %s, now %i references", objName, *referenceCountPtr);
    50 			flib_log_d("releasing %s, now %i references", objName, (*referenceCountPtr));
    48 			}
       
    49 		} else if((*referenceCountPtr) == 0) {
       
    50 			flib_log_e("Attempt to release a %s with zero references!", objName);
    51 		}
    51 		}
    52 	} else if((*referenceCountPtr) == 0) {
       
    53 		flib_log_e("Attempt to release a %s with zero references!", objName);
       
    54 	}
    52 	}
    55 	return result;
    53 	return result;
    56 }
    54 }