summaryrefslogtreecommitdiff
path: root/MLKCompiledClosure.m
diff options
context:
space:
mode:
Diffstat (limited to 'MLKCompiledClosure.m')
-rw-r--r--MLKCompiledClosure.m14
1 files changed, 11 insertions, 3 deletions
diff --git a/MLKCompiledClosure.m b/MLKCompiledClosure.m
index 35c8aca..b70fa03 100644
--- a/MLKCompiledClosure.m
+++ b/MLKCompiledClosure.m
@@ -38,7 +38,10 @@
_data = data;
_dataLength = dataLength;
- _code = code;
+ _ownPointer = YES;
+
+ _code = malloc (sizeof (id (*)()));
+ *_code = code;
for (i = 0; i < _dataLength; i++)
{
@@ -86,7 +89,7 @@
format:@"FFI type is invalid (this is probably a bug)."];
}
- ffi_call (&cif, FFI_FN (_code), &return_value, (void**)argv);
+ ffi_call (&cif, FFI_FN (*_code), &return_value, (void**)argv);
// FIXME
return [NSArray arrayWithObject:nullify(return_value)];
@@ -108,11 +111,16 @@
[super dealloc];
- // FIXME: Decrease refcount of _code.
+ // FIXME: Decrease refcount of *_code. Note: When releasing *_code,
+ // also release _code regardless of whether we own it.
+
for (i = 0; i < _dataLength; i++)
{
LRELEASE (_data[i]);
}
free (_data);
+
+ if (_ownPointer)
+ free (_code);
}
@end