[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 FAM
personal/stbuehler/ci-build
Glenn Strauss 2019-04-25 23:50:03 -04:00
parent a3d171526a
commit 38ce790657
1 changed files with 6 additions and 5 deletions

View File

@ -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:",