comparison mac/dw.m @ 2813:9c9b680f7772

Mac/iOS: Fix a memory leak when calling API functions that return. This affects iOS and newer versions of MacOS that require main thread.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 28 Jul 2022 09:54:23 +0000
parents ee1cfa7d645e
children 1b33d03568c4
comparison
equal deleted inserted replaced
2812:723b79981427 2813:9c9b680f7772
333 void _##func(NSPointerArray *_args) { 333 void _##func(NSPointerArray *_args) {
334 #define DW_FUNCTION_RETURN(func, rettype) [DWObj safeCall:@selector(callBack:) withObject:_args]; {\ 334 #define DW_FUNCTION_RETURN(func, rettype) [DWObj safeCall:@selector(callBack:) withObject:_args]; {\
335 void *tmp = [_args pointerAtIndex:[_args count]-1]; \ 335 void *tmp = [_args pointerAtIndex:[_args count]-1]; \
336 rettype myreturn = *((rettype *)tmp); \ 336 rettype myreturn = *((rettype *)tmp); \
337 free(tmp); \ 337 free(tmp); \
338 return myreturn; } \ 338 [_args release]; \
339 [_args release]; \ 339 DW_LOCAL_POOL_OUT; \
340 DW_LOCAL_POOL_OUT; } \ 340 return myreturn; }} \
341 void _##func(NSPointerArray *_args) { 341 void _##func(NSPointerArray *_args) {
342 #define DW_FUNCTION_RETURN_THIS(_retvar) { void *_myreturn = malloc(sizeof(_retvar)); \ 342 #define DW_FUNCTION_RETURN_THIS(_retvar) { void *_myreturn = malloc(sizeof(_retvar)); \
343 memcpy(_myreturn, (void *)&_retvar, sizeof(_retvar)); \ 343 memcpy(_myreturn, (void *)&_retvar, sizeof(_retvar)); \
344 [_args addPointer:_myreturn]; }} 344 [_args addPointer:_myreturn]; }}
345 #define DW_FUNCTION_RETURN_NOTHING } 345 #define DW_FUNCTION_RETURN_NOTHING }