[fpc-devel] "Unable to open file" on Linux randomly in a CGI application when using templates

ABorka fpc-devel at aborka.com
Mon Mar 15 21:02:28 CET 2010

Thanks for the help.

It appears that the GetLastOSError is 9 for these errors.
In the errno.inc for Linux, that is
   ESysEBADF       = 9;    { Bad file number }

I'm not exactly sure what this means though.
Right now as a workaround, when this happens, I do a sleep(100) and 
retry the page generation and it seems to work.

This only happens when multiple simultaneous requests arrive to the 
apache server (ex: a dozen iframes hitting cgi calls from a 3rd party 
website, requesting the same template to be used to generate a response 
web page with different parameters).

I would like to eliminate this problem in a more elegant way (fix) if it 
is possible.


On 3/15/2010 02:58, Jonas Maebe wrote:
>>>> I have a CGI application with a datamodule that is using templates
>>>> to generate the response pages (accessing a MySQL database through
>>>> ZEOS).
>>>> Every once in a while, I'm getting an "Unable to open file"
>>>> exception that points to one of the templates the website is using.
>>>> What could be the problem?
>>> Maybe you run out of file handles?
>> If that is the case, shouldn't something be in the syslog or some
>> other log?
> No. It's a generic user error like any other.
>> Is there any way I can check this for sure like last system error
>> string or something?
> You can call sysutils.GetLastOSError and look up the number in errno.inc
>> The exception message only says that "Unable to open file
>> <filepath_filename>".
>> I checked the /proc/sys/fs/file-max and it shows 294692
> The per-user open file handles limit is different. You can see it in the
> output of "ulimit -a" under bash (if it says "unlimited", it means that
> it uses the system limit). Maybe you leak file handles somewhere. You
> can look in /proc/<pid>/fd from time to time to see whether the number
> of open files keeps growing over time.

More information about the fpc-devel mailing list