Lines Matching refs:scf

54 	struct stat_cache_fam *scf;  member
298 stat_cache_fam * const scf = sc.scf; in fam_dir_periodic_cleanup() local
305 if (!scf->dirs) break; in fam_dir_periodic_cleanup()
307 fam_dir_tag_refcnt(scf->dirs, keys, &max_ndx); in fam_dir_periodic_cleanup()
310 splay_tree *node = scf->dirs = splaytree_splay(scf->dirs, ndx); in fam_dir_periodic_cleanup()
313 scf->dirs = splaytree_delete(scf->dirs, ndx); in fam_dir_periodic_cleanup()
315 scf->wds = splaytree_delete(scf->wds, fam_dir->req); in fam_dir_periodic_cleanup()
321 FAMCancelMonitor(&scf->fam, &fam_dir->req); in fam_dir_periodic_cleanup()
329 kevent(scf->fd, kevl, max_ndx, NULL, 0, &t0); in fam_dir_periodic_cleanup()
358 static void stat_cache_handle_fdevent_fn(stat_cache_fam * const scf, fam_dir_entry * const fam_dir,…
360 static void stat_cache_handle_fdevent_in(stat_cache_fam *scf) in stat_cache_handle_fdevent_in() argument
368 rd = (int)read(scf->fd, buf, sizeof(buf)); in stat_cache_handle_fdevent_in()
371 log_perror(scf->errh, __FILE__, __LINE__, "inotify error"); in stat_cache_handle_fdevent_in()
386 log_error(scf->errh, __FILE__, __LINE__, in stat_cache_handle_fdevent_in()
392 scf->wds = splaytree_splay(scf->wds, in->wd); in stat_cache_handle_fdevent_in()
393 if (!scf->wds || scf->wds->key != in->wd) in stat_cache_handle_fdevent_in()
395 fam_dir_entry *fam_dir = scf->wds->data; in stat_cache_handle_fdevent_in()
412 stat_cache_handle_fdevent_fn(scf, fam_dir, in->name, len, code); in stat_cache_handle_fdevent_in()
420 n = kevent(scf->fd, NULL, 0, kevl, sizeof(kevl)/sizeof(*kevl), &t0); in stat_cache_handle_fdevent_in()
427 scf->dirs = splaytree_splay(scf->dirs, ndx); in stat_cache_handle_fdevent_in()
428 if (!scf->dirs || scf->dirs->key != ndx) in stat_cache_handle_fdevent_in()
430 fam_dir_entry *fam_dir = scf->dirs->data; in stat_cache_handle_fdevent_in()
449 stat_cache_handle_fdevent_fn(scf, fam_dir, NULL, 0, code); in stat_cache_handle_fdevent_in()
453 for (int i = 0, ndx; i || (i = FAMPending(&scf->fam)) > 0; --i) { in stat_cache_handle_fdevent_in()
455 if (FAMNextEvent(&scf->fam, &fe) < 0) break; in stat_cache_handle_fdevent_in()
460 scf->dirs = splaytree_splay(scf->dirs, ndx); in stat_cache_handle_fdevent_in()
461 if (!scf->dirs || scf->dirs->key != ndx) { in stat_cache_handle_fdevent_in()
464 fam_dir_entry *fam_dir = scf->dirs->data; in stat_cache_handle_fdevent_in()
473 stat_cache_handle_fdevent_fn(scf, fam_dir, fe.filename, fnlen, fe.code); in stat_cache_handle_fdevent_in()
478 static void stat_cache_handle_fdevent_fn(stat_cache_fam * const scf, fam_dir_entry *fam_dir, const … in stat_cache_handle_fdevent_fn() argument
509 stat_cache_sptree_find(&scf->dirs, BUF_PTR_LEN(n)); in stat_cache_handle_fdevent_fn()
537 if (scf->dirs) in stat_cache_handle_fdevent_fn()
538 fam_dir_invalidate_tree(scf->dirs, in stat_cache_handle_fdevent_fn()
549 stat_cache_fam * const scf = ctx; /* sc.scf */ in stat_cache_handle_fdevent() local
552 stat_cache_handle_fdevent_in(scf); in stat_cache_handle_fdevent()
557 log_error(scf->errh, __FILE__, __LINE__, in stat_cache_handle_fdevent()
562 fdevent_fdnode_event_del(scf->ev, scf->fdn); in stat_cache_handle_fdevent()
563 fdevent_unregister(scf->ev, scf->fdn); in stat_cache_handle_fdevent()
564 scf->fdn = NULL; in stat_cache_handle_fdevent()
566 FAMClose(&scf->fam); in stat_cache_handle_fdevent()
567 scf->fd = -1; in stat_cache_handle_fdevent()
574 stat_cache_fam *scf = ck_calloc(1, sizeof(*scf)); in stat_cache_init_fam() local
575 scf->fd = -1; in stat_cache_init_fam()
576 scf->ev = ev; in stat_cache_init_fam()
577 scf->errh = errh; in stat_cache_init_fam()
581 scf->fd = inotify_init(); in stat_cache_init_fam()
582 if (scf->fd >= 0 && 0 != fdevent_fcntl_set_nb_cloexec(scf->fd)) { in stat_cache_init_fam()
583 close(scf->fd); in stat_cache_init_fam()
584 scf->fd = -1; in stat_cache_init_fam()
587 scf->fd = inotify_init1(IN_NONBLOCK|IN_CLOEXEC); in stat_cache_init_fam()
589 if (scf->fd < 0) { in stat_cache_init_fam()
591 free(scf); in stat_cache_init_fam()
596 scf->fd = kqueue1(O_NONBLOCK|O_CLOEXEC|O_NOSIGPIPE); in stat_cache_init_fam()
598 scf->fd = kqueue(); in stat_cache_init_fam()
599 if (scf->fd >= 0) fdevent_setfd_cloexec(scf->fd); in stat_cache_init_fam()
601 if (scf->fd < 0) { in stat_cache_init_fam()
603 free(scf); in stat_cache_init_fam()
608 if (0 != FAMOpen2(&scf->fam, "lighttpd")) { in stat_cache_init_fam()
611 free(scf); in stat_cache_init_fam()
616 FAMNoExists(&scf->fam); in stat_cache_init_fam()
621 if (FAMNoExists_fn) FAMNoExists_fn(&scf->fam); in stat_cache_init_fam()
625 scf->fd = FAMCONNECTION_GETFD(&scf->fam); in stat_cache_init_fam()
626 fdevent_setfd_cloexec(scf->fd); in stat_cache_init_fam()
628 scf->fdn = fdevent_register(scf->ev, scf->fd, stat_cache_handle_fdevent, scf); in stat_cache_init_fam()
629 fdevent_fdnode_event_set(scf->ev, scf->fdn, FDEVENT_IN | FDEVENT_RDHUP); in stat_cache_init_fam()
631 return scf; in stat_cache_init_fam()
634 static void stat_cache_free_fam(stat_cache_fam *scf) { in stat_cache_free_fam() argument
635 if (NULL == scf) return; in stat_cache_free_fam()
638 while (scf->wds) { in stat_cache_free_fam()
639 splay_tree *node = scf->wds; in stat_cache_free_fam()
640 scf->wds = splaytree_delete(scf->wds, node->key); in stat_cache_free_fam()
644 close(scf->fd); in stat_cache_free_fam()
645 scf->fd = -1; in stat_cache_free_fam()
647 while (scf->dirs) { in stat_cache_free_fam()
649 splay_tree *node = scf->dirs; in stat_cache_free_fam()
651 scf->dirs = splaytree_delete(scf->dirs, node->key); in stat_cache_free_fam()
654 if (-1 != scf->fd) { in stat_cache_free_fam()
656 FAMClose(&scf->fam); in stat_cache_free_fam()
660 free(scf); in stat_cache_free_fam()
663 static fam_dir_entry * fam_dir_monitor(stat_cache_fam *scf, char *fn, uint32_t dirlen, struct stat … in fam_dir_monitor() argument
665 if (NULL == scf->fdn) return NULL; /* FAM connection closed; do nothing */ in fam_dir_monitor()
682 scf->dirs = splaytree_splay(scf->dirs, dir_ndx); in fam_dir_monitor()
683 if (NULL != scf->dirs && scf->dirs->key == dir_ndx) { in fam_dir_monitor()
684 fam_dir = scf->dirs->data; in fam_dir_monitor()
722 if (scf->dirs) fam_dir_invalidate_tree(scf->dirs, fn, dirlen); in fam_dir_monitor()
728 scf->wds = splaytree_delete(scf->wds, fam_dir->req); in fam_dir_monitor()
730 if (0 != FAMCancelMonitor(&scf->fam, &fam_dir->req) in fam_dir_monitor()
731 || 0 != FAMMonitorDirectory(&scf->fam, fam_dir->name.ptr, in fam_dir_monitor()
740 scf->wds = splaytree_insert(scf->wds, fam_dir->req, fam_dir); in fam_dir_monitor()
749 if (0 != FAMMonitorDirectory(&scf->fam,fam_dir->name.ptr,&fam_dir->req, in fam_dir_monitor()
753 log_perror(scf->errh, __FILE__, __LINE__, in fam_dir_monitor()
757 log_error(scf->errh, __FILE__, __LINE__, in fam_dir_monitor()
765 scf->dirs = splaytree_insert(scf->dirs, dir_ndx, fam_dir); in fam_dir_monitor()
767 scf->wds = splaytree_insert(scf->wds, fam_dir->req, fam_dir); in fam_dir_monitor()
790 fam_dir->fam_parent = fam_dir_monitor(scf, fn, dirlen, &lst); in fam_dir_monitor()
874 sc.scf = stat_cache_init_fam(ev, errh); in stat_cache_init()
875 if (NULL == sc.scf) return 0; in stat_cache_init()
894 stat_cache_free_fam(sc.scf); in stat_cache_free()
895 sc.scf = NULL; in stat_cache_free()
1244 splay_tree **sptree = &sc.scf->dirs; in stat_cache_delete_dir()
1380 fam_dir_monitor(sc.scf, name->ptr, len, &st); in stat_cache_get_entry()