Running perl 5.12.4 and CGI:Session 4.48
In short, when perl exits with $session closed, it flushes an OLD state
of $session, prior to any forks and/or forks modifying $session STATE.
If perl dies intentionally (die;), erroneous flush is prevented.
Full Explaination:
This is all done through a web page. I open a session and insert a
value and close the session. I dump variables by opening, reading and
then closing the $session. I reopen the session and insert another
value and close the session. I fork a sub proces.
I am modifying the $session in a fork. In the main process, I have
closed the $session. In the one and only (hope to fork many later)
child process I open and modify the $session and close the session.
After the fork closes, I return to the parent process and reopen the
$session and I see all my values. I close the $session and then allow
the program to exit.
When the web page reloads I reopen the $session, the first value set is
present, the second valud set is present, but the child process values
are no longer there.
If I die the process instead of letting it exit, my values are all
present on reload, but if I allow the code to exit with the session
closed, it APPEARS that the program is flusing a PREVIOUS $session
state.
FYI, before I JUST upgraded the CGI:Session from an older version,
stored HASHes were not present either, but that test just worked.
If my $session is closed, I do not think the auto-flush should happen.
I want to be able to disable auto-flush to prevent it writing what it
thinks is correct, but is entirely destructive.
I do not have a test code snippet, but if you really want it I can pair
the application down. it is over 10,000 lines but I am sure with some
work I can make it a frame to exhibit the problem if need-be. I think
the problem should be pretty clear though.