Hello,
I have read the FAQ, and know that you can't fork with an open
database connection. I'm not doing that. I am however very confused If
anyone has the time to read this and give a hint as to what might be
going on, it would be greatly appreciated.
Thanks,
Kevin Martin
---------------------------------------------------------------------------
Firstly, this is running on mac os x 10.5.8 with sqlite 3.7.7.1
compiled directly into all binaries.
Here is the situation:
parent process
opens database
does stuff
closes database (sqlite3_close returns SQLITE_OK)
creates pipe
forks
closes write end of pipe
reopens database
reads data from pipe until it closes
continues on (all database queries issued here work)
child (relevant code)
global_ios->notify_fork(boost::asio::io_service::fork_child);
signal(SIGHUP, SIG_IGN);
setsid();
//close the socket, pipe, and stdin
global_currentSocket.reset();
close(pipefd[0]);
close(STDIN_FILENO);
//send stdout and stderr to the pipe
dup2(pipefd[1], STDERR_FILENO);
dup2(pipefd[1], STDOUT_FILENO);
close(pipefd[1]);
execl(arguments)
Now, in the execed child the database is opened and I can run queries
and everything is fine until I do
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
open("/dev/null",O_RDONLY);
open("/dev/null",O_WRONLY);
open("/dev/null",O_WRONLY);
After this point, any sqlite3_step() calls return SQLITE_ERROR.
Although I have forgotten the exact details, there was some very
similar code that consistently produced SQLITE_IOERR instead.
If I close the database before I close stdout/stdin/stderr and reopen
it afterwards there is no problem and everything works as expected.
The thing I find really confusing is if I run the execed child
directly from the shell instead of from the parent, there is no
problem and everything works fine. Which makes me think I am doing
something hideously wrong whilst forking.
Any insight appreciated.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users