don't leak startargs in start_standalone_factor_in_new_thread

db4
Joe Groff 2009-10-02 11:02:13 -05:00
parent 96df486753
commit b4ae77764c
1 changed files with 6 additions and 3 deletions

View File

@ -221,12 +221,15 @@ struct startargs {
vm_char **argv; vm_char **argv;
}; };
// arg must be new'ed because we're going to delete it!
void* start_standalone_factor_thread(void *arg) void* start_standalone_factor_thread(void *arg)
{ {
factor_vm *newvm = new factor_vm; factor_vm *newvm = new factor_vm;
register_vm_with_thread(newvm); register_vm_with_thread(newvm);
startargs *args = (startargs*) arg; startargs *args = (startargs*) arg;
newvm->start_standalone_factor(args->argc, args->argv); int argc = args->argc; vm_char **argv = args->argv;
delete args;
newvm->start_standalone_factor(argc, argv);
return 0; return 0;
} }
@ -240,7 +243,7 @@ VM_C_API void start_standalone_factor(int argc, vm_char **argv)
VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc, vm_char **argv) VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc, vm_char **argv)
{ {
startargs *args = new startargs; // leaks startargs structure startargs *args = new startargs;
args->argc = argc; args->argv = argv; args->argc = argc; args->argv = argv;
return start_thread(start_standalone_factor_thread,args); return start_thread(start_standalone_factor_thread,args);
} }