Thanks for the reply!
david.suarezdelis@telefonica.es wrote:
By itself, this works and no zombies are left behind, as expected. However, when used with FreeRadius, zombies are left behind.
FreeRADIUS has a wrapper around fork() that modules are expected to use. The reason is that the server is threaded, and some modules want to wait for the child to return. In a threaded environment, the SIGCHLD may be delivered to *another* thread, which causes problems.
Hence the wrapper, which catches all of the SIGCHLD's, and ensures they're delivered to the correct destination.
I understand the problem... How can I use/call the wrapper from rlm_perl (if it's possible at all)?
A solution is to modify src/main/threads.c, function reap_children(). Right now it loops over known PIDs, and waits on them. Change it to wait for any PID, and then look that PID up in the list. If it's known, it's updated. Otherwise, the status is tossed.
I have glanced at the code, but I'm not sure I can put time to do that at the moment... If there's a way to use the standard wrapper to fork() from rlm_perl, I'll do it... Anyway I'll speak with the bosses about the possibility... thanks! david ___________________________________________________________________________ Este mensaje se dirige exclusivamente a su destinatario y puede contener información privilegiada o confidencial. Si no es vd. el destinatario indicado, queda notificado de que la lectura, utilización, divulgación y/o copia sin autorización está prohibida en virtud de la legislación vigente. Si ha recibido este mensaje por error, le rogamos que nos lo comunique inmediatamente por esta misma vía y proceda a su destrucción. El correo electrónico vía Internet no permite asegurar la confidencialidad de los mensajes que se transmiten ni su integridad o correcta recepción. Telefónica no asume ninguna responsabilidad por estas circunstancias. This message is intended exclusively for its addressee and may contain information that is CONFIDENTIAL and protected by a professional privilege or whose disclosure is prohibited by law.If you are not the intended recipient you are hereby notified that any read, dissemination, copy or disclosure of this communication is strictly prohibited by law. If this message has been received in error, please immediately notify us via e-mail and delete it. Internet e-mail neither guarantees the confidentiality nor the integrity or proper receipt of the messages sent. Telefónica does not assume any liability for those circumstances. ___________________________________________________________________________
On Friday 16 June 2006 12:34, david.suarezdelis@telefonica.es wrote:
Thanks for the reply!
david.suarezdelis@telefonica.es wrote:
By itself, this works and no zombies are left behind, as expected.
I understand the problem... How can I use/call the wrapper from rlm_perl (if it's possible at all)?
See src/modules/rlm_perl.c Function XS_radiusd_radlog this is an wrapper for radlog. Take a look at it and make a wrapper for rad_fork.
A solution is to modify src/main/threads.c, function reap_children(). Right now it loops over known PIDs, and waits on them. Change it to wait for any PID, and then look that PID up in the list. If it's known, it's updated. Otherwise, the status is tossed.
I have glanced at the code, but I'm not sure I can put time to do that at the moment... If there's a way to use the standard wrapper to fork() from rlm_perl, I'll do it... Anyway I'll speak with the bosses about the possibility...
thanks! david
-- Best Regards, Boian Jordanov SNE Orbitel - Next Generation Telecom tel. +359 2 4004 723 tel. +359 2 4004 002
participants (2)
-
Boian Jordanov -
david.suarezdelis@telefonica.es