|
|
|
@ -159,9 +159,6 @@ static handler_t stat_cache_handle_fdevent(server *srv, void *_fce, int revent)
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < events; i++) { |
|
|
|
|
FAMEvent fe; |
|
|
|
|
splay_tree *node; |
|
|
|
|
int ndx; |
|
|
|
|
|
|
|
|
|
if (FAMNextEvent(&scf->fam, &fe) < 0) break; |
|
|
|
|
scf->dirs = splaytree_splay(scf->dirs, (int)(intptr_t)fe.userdata); |
|
|
|
|
if (!scf->dirs || scf->dirs->key != (int)(intptr_t)fe.userdata) { |
|
|
|
@ -193,28 +190,12 @@ static handler_t stat_cache_handle_fdevent(server *srv, void *_fce, int revent)
|
|
|
|
|
|
|
|
|
|
switch(fe.code) { |
|
|
|
|
case FAMChanged: |
|
|
|
|
++fam_dir->version; |
|
|
|
|
break; |
|
|
|
|
case FAMDeleted: |
|
|
|
|
case FAMMoved: |
|
|
|
|
/* if the filename is a directory remove the entry */ |
|
|
|
|
|
|
|
|
|
fam_dir->version++; |
|
|
|
|
|
|
|
|
|
/* file/dir is still here */ |
|
|
|
|
if (fe.code == FAMChanged) break; |
|
|
|
|
|
|
|
|
|
ndx = hashme(fe.filename, strlen(fe.filename)); |
|
|
|
|
|
|
|
|
|
scf->dirs = splaytree_splay(scf->dirs, ndx); |
|
|
|
|
node = scf->dirs; |
|
|
|
|
|
|
|
|
|
if (node && (node->key == ndx)) { |
|
|
|
|
int osize = splaytree_size(scf->dirs); |
|
|
|
|
|
|
|
|
|
fam_dir_entry_free(&scf->fam, node->data); |
|
|
|
|
scf->dirs = splaytree_delete(scf->dirs, ndx); |
|
|
|
|
|
|
|
|
|
force_assert(osize - 1 == splaytree_size(scf->dirs)); |
|
|
|
|
} |
|
|
|
|
fam_dir_entry_free(&scf->fam, fam_dir); |
|
|
|
|
scf->dirs = splaytree_delete(scf->dirs, scf->dirs->key); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|