Ejemplo n.º 1
0
static RETSIGTYPE sig_handler(int signum)
#endif
{
        switch(signum)
        {
        case SIGUSR1:
                printd(4, "Caught signal SIGUSR1\n");
                printd(3, "Invalidating path cache\n");
                pthread_mutex_lock(&file_access_mutex);
                filecache_invalidate(NULL);
                pthread_mutex_unlock(&file_access_mutex);
                break;
        case SIGSEGV:
                if (!glibc_test) {
                        printd(4, "Caught signal SIGSEGV\n");
#ifdef HAVE_STRUCT_SIGACTION_SA_SIGACTION
                        stack_trace(SIGSEGV, info, secret);
#endif
                } else {
                        printf("glibc validation failed\n");
                }
                exit(EXIT_FAILURE);
        case SIGCHLD:
                printd(4, "Caught signal SIGCHLD\n");
                break;
        }
#if RETSIGTYPE != void
        return (RETSIGTYPE)0;
#endif
}
Ejemplo n.º 2
0
static size_t reload_cache(void)
{
    size_t files = 0;
    list lst;

    if ( (lst = list_new()) == NULL)
        goto err;
    else if (!walk_all_directories(g_dirs, g_patterns, g_npatterns, lst, 1))
        goto err;
    else if (!filecache_invalidate(g_filecache))
        goto err;
    else {
        list_iterator li;
        unsigned long id;
        for (li = list_first(lst); !list_end(li); li = list_next(li)) {
            fileinfo fi = list_get(li);

            /* Now filecache owns the fileinfo objects */
            if (!filecache_add(g_filecache, fi, 1, &id))
                goto err;

            files++;
        }
    }

    sublist_free(lst);
    return files;

err:
    list_free(lst, (dtor)fileinfo_free);
    return 0;
}