|
From: Andy B. <aba...@ca...> - 2003-04-15 04:15:04
|
Leif,
Regarding the SegFaults I was seeing, they were accompanied by this
cryptic console output:
> Thread 0 Crashed:
> #0 0x9000434c in free_list_add_ptr
> #1 0x90003fe8 in szone_free
> #2 0x00004e28 in wrapperBuildJavaCommand
> #3 0x00003630 in wrapperEventLoop
> #4 0x000049e4 in wrapperRunConsole
> #5 0x0000591c in main
> #6 0x000018d8 in _start (crt.c:267)
> #7 0x00001758 in start
Which I used to track down to the wrapperBuildJavaCommand function in
the wrapper_unix.c file. With a little trial & error, I ended up making
this change to that function (note my 2 new printf's):
> while(wrapperData->jvmCommand[i] != NULL) {
> printf("before free [%d]\n", i);
> free(wrapperData->jvmCommand[i]);
> printf("after free [%d]\n", i);
> wrapperData->jvmCommand[i] = NULL;
> i++;
> }
Then when I executed "cd bin; ./testwrapper console", I saw this output:
> wrapper | --> Wrapper Started as Console
> wrapper | Launching a JVM...
> jvm 1 | Initializing...
> jvm 1 | Wrapper (Version 3.0.3)
> jvm 1 |
> jvm 1 | start()
> wrapper | JVM exited unexpectedly.
> before free [0]
> after free [0]
> before free [1]
> after free [1]
> before free [2]
> after free [2]
> before free [3]
> after free [3]
> before free [4]
> after free [4]
> before free [5]
> after free [5]
> before free [6]
> after free [6]
> before free [7]
> after free [7]
> before free [8]
> after free [8]
> before free [9]
> after free [9]
> before free [10]
> after free [10]
> before free [11]
> *** malloc[1553]: Deallocation of a pointer not malloced: 0xc000; This
> could be a double free(), or free() called with the middle of an
> allocated block; Try setting environment variable MallocHelp to see
> tools to help debug
> after free [11]
> before free [12]
> *** malloc[1553]: Deallocation of a pointer not malloced: 0x357b; This
> could be a double free(), or free() called with the middle of an
> allocated block; Try setting environment variable MallocHelp to see
> tools to help debug
> after free [12]
> wrapper | Launching a JVM...
> jvm 2 | Initializing...
> jvm 2 | Wrapper (Version 3.0.3)
> jvm 2 |
> jvm 2 | start()
> jvm 2 | stop(0)
> wrapper | <-- Wrapper Stopped
Note: the first "JVM exited unexpectedly" was due to clicking the
"halt(0)" button in the GUI, and the final "stop(0)" was due to
clicking the "exit" button.
So it appears that the last two indexed values in the jvmCommand, while
not NULL, are already freed once and this code is free'ing a 2nd time.
What are your thoughts on this?
~Andy
|