-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
The problem has been reported in the stunnel-users mailing list:
http://stunnel.mirt.net/pipermail/stunnel-users/2005-May/000482.html http://stunnel.mirt.net/pipermail/stunnel-users/2005-May/000484.html http://stunnel.mirt.net/pipermail/stunnel-users/2005-May/000490.html
on freebsd-ports mailing list:
http://lists.FreeBSD.org/pipermail/freebsd-ports/2005-May/023344.html
and has several FreeBSD problem reports submitted:
http://www.FreeBSD.org/cgi/query-pr.cgi?pr=81001 http://www.FreeBSD.org/cgi/query-pr.cgi?pr=81162 http://www.FreeBSD.org/cgi/query-pr.cgi?pr=81289
Patch that fixes this problem can be found here:
http://www.FreeBSD.org/cgi/query-pr.cgi?pr=82202
It does not break anything if applied with Linux stunnel, so it can be considered "universal". It will be good if we see this (or similar) fix in the next version of stunnel.
The problem is that we cannot (at least on FreeBSD):
1. create context A (cleanup context) 2. create context B and set B's uc_link to point to A 3. swapcontext(3) to B What happens is that B's function returns, A's function passes control to the main thread of execution 4. create context C and set C's uc_link to point to A What happens is that A is exhausted and this will not work as expected 5. swapcontext(3) to C We expect A's function to be executed after C's function returns, but instead exit(3) is called when A's function returns and the whole program terminates normally after serving its second request.