Esempio n. 1
0
void
dbglock_init(void)
{
    if (dbglock_fd != -1)
        return;

    if (!dbg_enabled_p())
        return;

    const char envvar[] = "FB_ADB_DBGLOCK_NAME";
    /* No, we can't just inherit the file descriptor.  Without a
     * separate file open, taking the lock won't block.  */

    const char* fn = getenv(envvar);
    if (fn == NULL) {
        const char* pfx = DEFAULT_TEMP_DIR;
        char* tmpfname = xaprintf("%s/fb-adb-dbg-XXXXXX", pfx);
        struct cleanup* cl = cleanup_allocate();
        int tmpfd = mkostemp(tmpfname, O_CLOEXEC);
        if (tmpfd != -1) {
            setenv(envvar, tmpfname, 1);
            cleanup_commit(cl, cleanup_dbginit, tmpfname);
            dbglock_fd = tmpfd;
        }

        return;
    }

    dbglock_fd = open(fn, O_CLOEXEC | O_RDWR);
}
Esempio n. 2
0
void
dbg_1(const char* fmt, ...)
{
    if (dbg_enabled_p()) {
        va_list args;
        va_start(args, fmt);
        dbg_internal(fmt, args);
        va_end(args);
    }
}
Esempio n. 3
0
void
dbglock(void)
{
    int saved_errno = errno;
    if (!dbg_enabled_p())
        return;

    if (dbglock_fd == -1)
        return;

    if (dbglock_level++ == 0)
        flock(dbglock_fd, LOCK_EX);

    cleanup_commit(cleanup_allocate(), cleanup_dbglock, 0);
    errno = saved_errno;
}
Esempio n. 4
0
void
dbg_1(const char* fmt, ...)
{
    int saved_errno = errno;
    if (dbg_enabled_p()) {
        SCOPED_RESLIST(rl_dbg);
        dbglock();
        va_list args;
        fprintf(dbgout, "%s(%04d): ", prgname, getpid());
        va_start(args, fmt);
        vfprintf(dbgout, fmt, args);
        va_end(args);
        fputc('\n', dbgout);
        fflush(dbgout);
    }
    errno = saved_errno;
}
Esempio n. 5
0
void
dbglock(void)
{
    int saved_errno = errno;
    if (!dbg_enabled_p())
        return;

    if (dbglock_fd == -1)
        return;

    if (dbglock_level++ == 0) {
        WITH_IO_SIGNALS_ALLOWED();
        flock(dbglock_fd, LOCK_EX);
    }

    cleanup_commit(cleanup_allocate(), cleanup_dbglock, 0);
    errno = saved_errno;
}
Esempio n. 6
0
void
dbg_1v(const char* fmt, va_list args)
{
    if (dbg_enabled_p())
        dbg_internal(fmt, args);
}