Mercurial > dwindows
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 } |