New GTK Wrapper



Hi List, I am witting a wrapper to GTK for a new Smalltalk implementation
called Huemul.

I use a general marshaller for all type of callbacks. It is doing well so
far.
Now I want some new functionality, that involves creating a new thread for
each callback. The problem is that when the callback returns, it frees the
arguments of the callback, and that sigsegv's the new thread that is still
using those arguments. Is there a way to control when those arguments are
freed?

This is the marshaller:

gboolean signalCallback(GObject* object, gpointer data, gint
paramValuesSize, const GValue* paramValues) {

	int i;

	STGCallback *callback = (STGCallback *)data;
	STArray *arguments = (STArray *)newObject( Array,
newInteger(paramValuesSize + 1) );
	STArray *aPointer = ( STArray * )newVariableByteObject( ExternalAddress,
newInteger( 4 ) );
	aPointer->array[0] = (CObjectPointer)object;
	arguments->array[ 0 ] = tagObject((STObject *)aPointer);
	for (i = 0; i <= (paramValuesSize - 1); i += 1) {
		aPointer = ( STArray * )newVariableByteObject( ExternalAddress,
newInteger( 4 ) );
		aPointer->array[0] = (CObjectPointer)(paramValues + i);
		arguments->array[ i + 1 ] = tagObject((STObject *)aPointer);
	}
	callback->arguments = tagObject((STObject *)arguments);
	gdk_threads_leave();
	CObjectPointer returnObject =
_GCallback_Class_processCallbackC58_bytecodes( nil, callback->handler );
	gdk_threads_enter();
	if(returnObject  == true)
		return TRUE;
	if(returnObject  == false)
		return FALSE;
	error("Unexpected return value in callback");
}

Thanks very much in advance



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]