Opened 15 years ago
Closed 15 years ago
#5055 closed bug (fixed)
fdopendir closes file descriptor too early
Reported by: | augiedoggie | Owned by: | nobody |
---|---|---|---|
Priority: | normal | Milestone: | R1 |
Component: | System/POSIX | Version: | R1/Development |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Platform: | All |
Description
After the *at() functions were added in hrev34288, mercurial has been trying to use those functions. It is currently exiting because of a bad file descriptor when it tries to scan a directory using fdopendir()/readdir()/fstatat(). I believe the comment from dirent.c is correct and the file descriptor should not be closed in the fdopendir() function.
I will attach a small piece of sample code if I can get networking to work again(dhcp won't give me an address in hrev34349). The sample code is basically an excerpt from the mercurial code in osutil.c
Attachments (1)
Change History (4)
by , 15 years ago
comment:1 by , 15 years ago
Well, the main reason this is breaking is because the code itself is broken; ie. it does not adhere to the specs (besides not using closedir() to close the directory).
However, if this is used this way in applications, and they do work on other platforms, I guess we should just follow their example.
comment:2 by , 15 years ago
Yes, it's not in my area of expertise, if I even have one :)
There is a closedir() in the mercurial code that I forgot to add to my test but I don't think it should affect the outcome because the error is before that part of code is even reached.
comment:3 by , 15 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Looks like newer specs have clarified the issue: and indeed, only closedir() should actually close the descriptor, and applications are allowed to use the descriptor without changing its state.
Should be fixed in hrev34362.
Code which fails on haiku, but runs on Linux (when run as 'fdtest .')