Just an update from the conversation I had with Yuri.

He confirmed that the APR crashes if build with VS2008.
(both debug and release version of msvcrt90(d).dll)
Now looking at the MSVCRT source for _close, I suspect
it crashes with VS2005 as well.

Since it doesn't crash if linked to msvcrt.dll I presume
the cause is the following comment:

<snip>
In order to avoid later segfaults with handle 'reuse',
we must protect against the case that a dup2'ed handle
is being closed, and invalidate the corresponding StdHandle
We also tell msvcrt when stdhandles are closed.
</snip>

Indeed the crash happens on second _close(1) call.
I presume the _close(x) should be called *only* if
the file was dup2'ed (at least according to the comment
in the code), so I'll try to figure out how to fix that
unless Bill has some other ideas or suggestions.




The following simple code reproduces such error:

int main(int a, char** b)
{
apr_pool_t * pool;
apr_file_t *file1, *file2;


apr_initialize();
apr_pool_create(&pool, NULL);

apr_file_open_stdout(&file1, pool);
apr_file_open_stdout(&file2, pool);

apr_file_puts("Hello World (1)\n", file1);
apr_file_puts("Hello World (2)\n", file2);

apr_file_close(file1);
apr_file_close(file2); // <-- crash is here.

apr_terminate();

return(0);
}


Regards
--
^TM

Reply via email to