missing file descriptors
utzoo!decvax!duke!unc!smb
utzoo!decvax!duke!unc!smb
Thu Aug 20 22:04:12 AEST 1981
If a process is interrupted while trying to open a file, the
file descriptor tentatively assigned is lost -- unless you
know what it should be and close it! The following program
demonstrates this. (This was run under 4bsd, but I believe
the same problem is present in V6 and V7.) Note that this
implies that a device driver close routine can be called
for a file that was never successfully opened -- which might
cause problems for weird devices/drivers.
#include <signal.h>
#include <errno.h>
#define CLOSEDTTY "/dev/ttyia" /* should wait forever */
#define FLIM 25 /* maximum open files */
extern errno;
main()
{
int i, j;
int f;
int tick();
char lbuf[100];
signal(SIGALRM, tick);
for (j = 0; j<2; j++) {
for (i = 3; i < FLIM; i++)
close(i);
for (i=0; i<FLIM; i++) {
alarm(2);
f = open(CLOSEDTTY, 1);
if (f >= 0) {
printf("Huh -- f=%d\n", f);
}
else if (errno != EINTR) {
alarm(0);
sprintf(lbuf, "i=%d j=%d", i, j);
perror(lbuf);
break;
}
if (j) {
if (close(3) < 0) perror("close");
}
}
printf("end inner loop, i=%d\n", i);
}
}
tick()
{
signal(SIGALRM, tick);
return;
}
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list