[stat_cache] FAM: use entry hash index as userdata
Upon receipt of FAM event, validate that entry exists in splaytree instead of blindly accessing memory through the pointer returned in userdata by FAMpersonal/stbuehler/ci-build
parent
a3d171526a
commit
38ce790657
|
@ -159,13 +159,15 @@ static handler_t stat_cache_handle_fdevent(server *srv, void *_fce, int revent)
|
|||
|
||||
for (i = 0; i < events; i++) {
|
||||
FAMEvent fe;
|
||||
fam_dir_entry *fam_dir;
|
||||
splay_tree *node;
|
||||
int ndx;
|
||||
|
||||
if (FAMNextEvent(&scf->fam, &fe) < 0) break;
|
||||
|
||||
/* handle event */
|
||||
scf->dirs = splaytree_splay(scf->dirs, (int)(intptr_t)fe.userdata);
|
||||
if (!scf->dirs || scf->dirs->key != (int)(intptr_t)fe.userdata) {
|
||||
continue;
|
||||
}
|
||||
fam_dir_entry *fam_dir = scf->dirs->data;
|
||||
|
||||
switch(fe.code) {
|
||||
case FAMChanged:
|
||||
|
@ -173,7 +175,6 @@ static handler_t stat_cache_handle_fdevent(server *srv, void *_fce, int revent)
|
|||
case FAMMoved:
|
||||
/* if the filename is a directory remove the entry */
|
||||
|
||||
fam_dir = fe.userdata;
|
||||
fam_dir->version++;
|
||||
|
||||
/* file/dir is still here */
|
||||
|
@ -300,7 +301,7 @@ static void stat_cache_fam_dir_monitor(server *srv, stat_cache_fam *scf, stat_ca
|
|||
fam_dir->version = 1;
|
||||
|
||||
if (0 != FAMMonitorDirectory(&scf->fam, fam_dir->name->ptr,
|
||||
&fam_dir->req, fam_dir)) {
|
||||
&fam_dir->req, (void *)(intptr_t)scf->dir_ndx)) {
|
||||
|
||||
log_error_write(srv, __FILE__, __LINE__, "sbsbs",
|
||||
"monitoring dir failed:",
|
||||
|
|
Loading…
Reference in New Issue