Re: how to break out of FCGX_Accept_r
"Emil A Eklund" <[email protected]>
| Newsgroups | gmane.comp.web.fastcgi.devel |
|---|---|
| Message-ID | <[email protected]> |
The FCGX_Accept_r does something similar internally, but yeah, it's a bit more expensive than a blocking call. /Emil ----- Original Message ----- From: "Andrej van der Zee" <[email protected]> To: "Emil A Eklund" <[email protected]> Cc: <fastcgi-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org> Sent: Friday, November 18, 2005 12:35 Subject: Re: [FASTCGI] how to break out of FCGX_Accept_r > Hi, > > Thanks for your reply. Because it is non-blocking, isn't this a waist of > CPU cycles? > > Greets, > > Andrej > > PS Don't bother for the Window's patches, I am using Linux here. > > > > Emil A Eklund wrote: > >> You could use a non blocking FCGX_Accept_r and check for the shutdown >> condition yourself. Thats the way I've solved it. >> >> state = WORKER_RUNNING; >> FCGX_InitRequest(&request, listenSocket, FCGI_FAIL_ACCEPT_ON_INTR); >> while (1) { >> while (state != WORKER_TERMINATE) { >> rc = FCGX_Accept_r(&request); >> if (rc != -9999) { break; } >> } >> if ((rc != 0) && (state != WORKER_TERMINATE)) { log(LOG_CRITICAL, >> "Accept Failed, thread killed!"); break; } >> if (state == WORKER_TERMINATE) { break; } >> >> ... >> >> FCGX_Finish_r(&request); >> } >> >> For windows there is no built in way to make Accept_r non-blocking (or at >> least was not when I last checked), however I have a patch somewhere that >> implements that, I'll try to dig it up. >> >> /Emil >> >> ----- Original Message ----- From: "Andrej van der Zee" >> <[email protected]> >> To: <fastcgi-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org> >> Sent: Friday, November 18, 2005 10:40 >> Subject: [FASTCGI] how to break out of FCGX_Accept_r >> >> >>> Hi, >>> >>> I would like to know if it is possible to break out of the pending >>> accept-call and how to do this. The problem is, I have to shutdown the >>> fast-cgi after it has been runnig for 8 hours. In c++, when I schedule a >>> threat that wakes up after 8 hours, the fast-cgi main-loop can be in two >>> situations: >>> 1) It is handling a request. In this case the fast-cgi should finish >>> after handling it. This can be done with FCGX_ShutdownPending(). No >>> problem here. >>> 2) The main-loop is in FCGX_Accept_r waiting for an incomming >>> connection. In this case I would like to break out of the accept and >>> immideately finish the fast-cgi application. >>> >>> In the threat that wakes up after 8 hours, I was thinking to raise a >>> signal in case 2 only. Though, how can I be sure that we are in case 2? >>> Setting flags before entering and after leaving FCGX_Accept_r is not >>> sufficient because my treat may wakeup when fast-cgi already accpeted a >>> request, but has not come out of FCGX_Accept_r yet. >>> >>> Any ideas? Any other solutions? >>> >>> Thanks a bunch! >>> >>> Andrej >>> ___________________________________ >>> fastcgi-developers mailing list >>> http://fastcgi.com/fastcgi-developers/ >>> >> >> > ___________________________________ fastcgi-developers mailing list http://fastcgi.com/fastcgi-developers/