comparison ios/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 975df4680ff7
children 5000a8a43825
comparison
equal deleted inserted replaced
2812:723b79981427 2813:9c9b680f7772
186 void _##func(NSPointerArray *_args) { 186 void _##func(NSPointerArray *_args) {
187 #define DW_FUNCTION_RETURN(func, rettype) [DWObj safeCall:@selector(callBack:) withObject:_args]; {\ 187 #define DW_FUNCTION_RETURN(func, rettype) [DWObj safeCall:@selector(callBack:) withObject:_args]; {\
188 void *tmp = [_args pointerAtIndex:[_args count]-1]; \ 188 void *tmp = [_args pointerAtIndex:[_args count]-1]; \
189 rettype myreturn = *((rettype *)tmp); \ 189 rettype myreturn = *((rettype *)tmp); \
190 free(tmp); \ 190 free(tmp); \
191 return myreturn; } \ 191 [_args release]; \
192 [_args release]; \ 192 DW_LOCAL_POOL_OUT; \
193 DW_LOCAL_POOL_OUT; } \ 193 return myreturn; }} \
194 void _##func(NSPointerArray *_args) { 194 void _##func(NSPointerArray *_args) {
195 #define DW_FUNCTION_RETURN_THIS(_retvar) { void *_myreturn = malloc(sizeof(_retvar)); \ 195 #define DW_FUNCTION_RETURN_THIS(_retvar) { void *_myreturn = malloc(sizeof(_retvar)); \
196 memcpy(_myreturn, (void *)&_retvar, sizeof(_retvar)); \ 196 memcpy(_myreturn, (void *)&_retvar, sizeof(_retvar)); \
197 [_args addPointer:_myreturn]; }} 197 [_args addPointer:_myreturn]; }}
198 #define DW_FUNCTION_RETURN_NOTHING } 198 #define DW_FUNCTION_RETURN_NOTHING }