IS4Code / PawnPlus

A SA-MP plugin enhancing the capabilities of the Pawn programming language

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

task_detach crash with JIT

badabingbadabooom opened this issue · 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
commented

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.