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); }
void dbg_1(const char* fmt, ...) { if (dbg_enabled_p()) { va_list args; va_start(args, fmt); dbg_internal(fmt, args); va_end(args); } }
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; }
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; }
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; }
void dbg_1v(const char* fmt, va_list args) { if (dbg_enabled_p()) dbg_internal(fmt, args); }