PawnPlus icon indicating copy to clipboard operation
PawnPlus copied to clipboard

task_detach crash with JIT

Open badabingbadabooom opened this issue 2 years ago • 1 comments

Using the task_detach function and later using any asynchronous function crashes the server if the script is JIT compiled.

Running this script in Windows and with jit_sleep enabled, the server crashes after "detached" gets printed on the console.

#include <PawnPlus>
#include <a_samp>
#include <jit>

public OnJITCompile()
{
	return 1;
}

myfunc(time)
{
	printf("myfunc(time = %i)", time);

	print("detaching...");
	task_detach();
	task_yield(1);
	print("detached");
	
	wait_ms(time);
	
	printf("%i milliseconds have passed", time);
	
	return 1;
}

main()
{
	new r = myfunc(1000);
	printf("myfunc returned %i", r); 
	return 0; 
}

With no JIT, it gives the expected output:

myfunc(time = 1000)
detaching...
detached
myfunc returned 1
Number of vehicle models: 0
1000 milliseconds have passed

badabingbadabooom avatar Apr 10 '22 01:04 badabingbadabooom

That can be expected. JIT converts the AMX code to native code, while task_detach expects the stack and frame pointers to point to memory using standard AMX layout. I may be able to turn the crash into an error, but support has to be provided by the JIT, as bad as it sounds.

IS4Code avatar Apr 10 '22 10:04 IS4Code