win32 main starts factorvm in new thread
							parent
							
								
									5c2a28173a
								
							
						
					
					
						commit
						aa005c948f
					
				| 
						 | 
				
			
			@ -170,8 +170,9 @@ void factorvm::pass_args_to_factor(int argc, vm_char **argv)
 | 
			
		|||
	growable_array args(this);
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	for(i = 1; i < argc; i++)
 | 
			
		||||
	for(i = 1; i < argc; i++){
 | 
			
		||||
		args.add(allot_alien(F,(cell)argv[i]));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	args.trim();
 | 
			
		||||
	userenv[ARGS_ENV] = args.elements.value();
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +213,6 @@ void factorvm::factor_sleep(long us)
 | 
			
		|||
 | 
			
		||||
void factorvm::start_standalone_factor(int argc, vm_char **argv)
 | 
			
		||||
{
 | 
			
		||||
	//printf("thread id is %d\n",GetCurrentThreadId());fflush(stdout);
 | 
			
		||||
	register_vm(GetCurrentThreadId(),this);
 | 
			
		||||
	vm_parameters p;
 | 
			
		||||
	default_parameters(&p);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,5 +3,4 @@ namespace factor
 | 
			
		|||
 | 
			
		||||
VM_C_API void start_standalone_factor(int argc, vm_char **argv);
 | 
			
		||||
VM_C_API void *start_standalone_factor_in_new_thread(int argc, vm_char **argv);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,6 @@ s64 factorvm::current_micros()
 | 
			
		|||
 | 
			
		||||
FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe)
 | 
			
		||||
{
 | 
			
		||||
	//printf("exception handler %d\n",GetCurrentThreadId());fflush(stdout);
 | 
			
		||||
	factorvm *myvm = lookup_vm(GetCurrentThreadId());
 | 
			
		||||
	PEXCEPTION_RECORD e = (PEXCEPTION_RECORD)pe->ExceptionRecord;
 | 
			
		||||
	CONTEXT *c = (CONTEXT*)pe->ContextRecord;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,12 +63,17 @@ FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe)
 | 
			
		|||
	return EXCEPTION_CONTINUE_EXECUTION;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool handler_added = 0;
 | 
			
		||||
 | 
			
		||||
void factorvm::c_to_factor_toplevel(cell quot)
 | 
			
		||||
{
 | 
			
		||||
	if(!AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_HANDLER)exception_handler))
 | 
			
		||||
		fatal_error("AddVectoredExceptionHandler failed", 0);
 | 
			
		||||
	if(!handler_added){
 | 
			
		||||
		if(!AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_HANDLER)exception_handler))
 | 
			
		||||
			fatal_error("AddVectoredExceptionHandler failed", 0);
 | 
			
		||||
		handler_added = 1;
 | 
			
		||||
	}
 | 
			
		||||
	c_to_factor(quot,this);
 | 
			
		||||
	RemoveVectoredExceptionHandler((void *)exception_handler);
 | 
			
		||||
 	RemoveVectoredExceptionHandler((void *)exception_handler);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void factorvm::open_console()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue