[Bug c++/24217] New: filebuf.open call sets the error bits incorrectly
We are using filebuf.open call to open a file in readonly mode in a multi-threaded application. The result of the open call is checked with is_open. The truss log shows that the file was opened successfully giving the file handle. However, the application log shows that the open call failed and that fail() was true with rdstate=4. This behaviour is seen only after a few minutes of application running (during which time it successfully opens the same file). -- Summary: filebuf.open call sets the error bits incorrectly Product: gcc Version: 3.3.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hemasai at yahoo dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24217
[Bug libstdc++/24217] filebuf.open call sets the error bits incorrectly
--- Comment #2 from hemasai at yahoo dot com 2005-10-06 18:12 --- sample code: fn(const char* fname) { ifstream fstr; if (!fname) return; fstr.clear(); fstr.open(fname, ios::in | ios::nocreate); if (!(fstr.is_open())) { cout << "rdstate():" << fstr.rdstate(); cout << "bad():" << fstr.bad(); cout << "fail():" << fstr.fail(); return; } //Read the file contents } As you can see, the fstr is a stack variable that is used to access the file. The flags were cleared before the open call. When it failed rdstate was set to 4. This function call successfully opened the file multiple times before the failure. -- hemasai at yahoo dot com changed: What|Removed |Added Status|WAITING |UNCONFIRMED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24217