Sat Jan 9 19:15:00 1999 Norbert Warmuth <nwarmuth@privat.circular.de>

* vfs/vfs.c (vfs_timeout_handler): Guard from recursive invocation.

Sat Jan  9 19:13:28 1999  Norbert Warmuth  <nwarmuth@privat.circular.de>

* vfs/sfs.c (sfs_free): Fixed wrong linked list handling (head was
lost after the first iteration).

(sfs_getid): dito, return value was wrong.
This commit is contained in:
Norbert Warmuth 1999-01-09 23:08:41 +00:00
parent 23155b3f8b
commit 749d16ba30
3 changed files with 35 additions and 17 deletions

View File

@ -1,3 +1,14 @@
Sat Jan 9 19:15:00 1999 Norbert Warmuth <nwarmuth@privat.circular.de>
* vfs.c (vfs_timeout_handler): Guard from recursive invocation.
Sat Jan 9 19:13:28 1999 Norbert Warmuth <nwarmuth@privat.circular.de>
* sfs.c (sfs_free): Fixed wrong linked list handling (head was
lost after the first iteration).
(sfs_getid): dito, return value was wrong.
Sat Jan 9 22:49:02 1999 Timur I. Bakeyev <timur@com.bat.ru> Sat Jan 9 22:49:02 1999 Timur I. Bakeyev <timur@com.bat.ru>
* vfs.c (parse_ls_lga): Rewrite function to make it more stright. * vfs.c (parse_ls_lga): Rewrite function to make it more stright.

View File

@ -201,21 +201,20 @@ static int sfs_readlink (vfs *me, char *path, char *buf, int size)
return readlink (path, buf, size); return readlink (path, buf, size);
} }
#define CUR (*cur)
static vfsid sfs_getid (vfs *me, char *path, struct vfs_stamping **parent) static vfsid sfs_getid (vfs *me, char *path, struct vfs_stamping **parent)
{ /* FIXME: what should I do? */ { /* FIXME: what should I do? */
vfs *v; vfs *v;
vfsid id; vfsid id;
struct vfs_stamping *par; struct vfs_stamping *par;
struct cachedfile **cur = &head; struct cachedfile *cur = head;
while (CUR) { while (cur) {
if ((!strcmp( path, CUR->name )) && if ((!strcmp( path, cur->name )) &&
(vfs_uid == CUR->uid)) (vfs_uid == cur->uid))
break; break;
CUR = CUR->next; cur = cur->next;
} }
if (!CUR) if (!cur)
vfs_die( "sfs_getid of noncached thingie?" ); vfs_die( "sfs_getid of noncached thingie?" );
*parent = NULL; *parent = NULL;
@ -240,19 +239,19 @@ static vfsid sfs_getid (vfs *me, char *path, struct vfs_stamping **parent)
static void sfs_free (vfsid id) static void sfs_free (vfsid id)
{ {
struct cachedfile *which = (struct cachedfile *) id; struct cachedfile *which = (struct cachedfile *) id;
struct cachedfile **cur = &head; struct cachedfile *cur, *prev;
unlink( CUR->cache ); for (cur = head, prev = 0; cur && cur != which; prev = cur, cur = cur->next)
while (CUR) { ;
if (CUR == which) if (!cur)
break;
CUR = CUR->next;
}
if (!CUR)
vfs_die( "Free of thing which is unknown to me\n" ); vfs_die( "Free of thing which is unknown to me\n" );
*cur = CUR->next; unlink (cur->cache);
if (prev)
prev->next = cur->next;
else
head = cur->next;
} }
#undef CUR
static void sfs_fill_names (vfs *me, void (*func)(char *)) static void sfs_fill_names (vfs *me, void (*func)(char *))
{ {

View File

@ -1150,9 +1150,16 @@ timeoutcmp (struct timeval *t1, struct timeval *t2)
void void
vfs_timeout_handler (void) vfs_timeout_handler (void)
{ {
static int locked;
struct timeval time; struct timeval time;
struct vfs_stamping *stamp, *st; struct vfs_stamping *stamp, *st;
/* Avoid recursive invocation, e.g. when one of the free functions
calls message_1s */
if (locked)
return;
locked = 1;
gettimeofday (&time, NULL); gettimeofday (&time, NULL);
time.tv_sec -= vfs_timeout; time.tv_sec -= vfs_timeout;
@ -1165,6 +1172,7 @@ vfs_timeout_handler (void)
} else } else
stamp = stamp->next; stamp = stamp->next;
} }
locked = 0;
} }
void void