(!1691) os: log: replace ErrorFSigSafe() by ErrorF()

Since ErrorF() is now signal safe, we can use this one instead.
Leaving ErrorFSigSafe() macro for backwards compat with drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-09-12 17:31:00 +02:00
parent 91b6453087
commit 8dbd909d7b
9 changed files with 60 additions and 79 deletions

View File

@ -1964,7 +1964,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
ti = TouchFindByDDXID(dev, ddx_touchid, (type == XI_TouchBegin)); ti = TouchFindByDDXID(dev, ddx_touchid, (type == XI_TouchBegin));
if (!ti) { if (!ti) {
ErrorFSigSafe("[dix] %s: unable to %s touch point %u\n", dev->name, ErrorF("[dix] %s: unable to %s touch point %u\n", dev->name,
type == XI_TouchBegin ? "begin" : "find", ddx_touchid); type == XI_TouchBegin ? "begin" : "find", ddx_touchid);
return 0; return 0;
} }
@ -1998,16 +1998,14 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
if (!mask_in || if (!mask_in ||
!valuator_mask_isset(mask_in, 0) || !valuator_mask_isset(mask_in, 0) ||
!valuator_mask_isset(mask_in, 1)) { !valuator_mask_isset(mask_in, 1)) {
ErrorFSigSafe("%s: Attempted to start touch without x/y " ErrorF("%s: Attempted to start touch without x/y (driver bug)\n", dev->name);
"(driver bug)\n", dev->name);
return 0; return 0;
} }
break; break;
case XI_TouchUpdate: case XI_TouchUpdate:
event->type = ET_TouchUpdate; event->type = ET_TouchUpdate;
if (!mask_in || valuator_mask_num_valuators(mask_in) <= 0) { if (!mask_in || valuator_mask_num_valuators(mask_in) <= 0) {
ErrorFSigSafe("%s: TouchUpdate with no valuators? Driver bug\n", ErrorF("%s: TouchUpdate with no valuators? Driver bug\n", dev->name);
dev->name);
} }
break; break;
case XI_TouchEnd: case XI_TouchEnd:

View File

@ -78,7 +78,7 @@ DeletePredictableAccelerationProperties(DeviceIntPtr,
/*#define PTRACCEL_DEBUGGING*/ /*#define PTRACCEL_DEBUGGING*/
#ifdef PTRACCEL_DEBUGGING #ifdef PTRACCEL_DEBUGGING
#define DebugAccelF(...) ErrorFSigSafe("dix/ptraccel: " __VA_ARGS__) #define DebugAccelF(...) ErrorF("dix/ptraccel: " __VA_ARGS__)
#else #else
#define DebugAccelF(...) /* */ #define DebugAccelF(...) /* */
#endif #endif

View File

@ -858,12 +858,12 @@ ddxGiveUp(enum ExitCode error)
void void
OsVendorFatalError(const char *f, va_list args) OsVendorFatalError(const char *f, va_list args)
{ {
ErrorFSigSafe("\nPlease consult the " XVENDORNAME " support \n\t at " ErrorF("\nPlease consult the " XVENDORNAME " support \n\t at "
__VENDORDWEBSUPPORT__ "\n for help. \n"); __VENDORDWEBSUPPORT__ "\n for help. \n");
if (xf86LogFile && xf86LogFileWasOpened) if (xf86LogFile && xf86LogFileWasOpened)
ErrorFSigSafe("Please also check the log file at \"%s\" for additional " ErrorF("Please also check the log file at \"%s\" for additional "
"information.\n", xf86LogFile); "information.\n", xf86LogFile);
ErrorFSigSafe("\n"); ErrorF("\n");
} }
void void

View File

@ -415,10 +415,10 @@ extern _X_EXPORT unsigned long serverGeneration;
/* Don't use this directly, use BUG_WARN or BUG_WARN_MSG instead */ /* Don't use this directly, use BUG_WARN or BUG_WARN_MSG instead */
#define __BUG_WARN_MSG(cond, with_msg, ...) \ #define __BUG_WARN_MSG(cond, with_msg, ...) \
do { if (cond) { \ do { if (cond) { \
ErrorFSigSafe("BUG: triggered 'if (" #cond ")'\n"); \ ErrorF("BUG: triggered 'if (" #cond ")'\n"); \
ErrorFSigSafe("BUG: %s:%u in %s()\n", \ ErrorF("BUG: %s:%u in %s()\n", \
__FILE__, __LINE__, __func__); \ __FILE__, __LINE__, __func__); \
if (with_msg) ErrorFSigSafe(__VA_ARGS__); \ if (with_msg) ErrorF(__VA_ARGS__); \
xorg_backtrace(); \ xorg_backtrace(); \
} } while(0) } } while(0)

View File

@ -373,9 +373,6 @@ _X_ATTRIBUTE_PRINTF(1, 2);
extern _X_EXPORT void extern _X_EXPORT void
VErrorFSigSafe(const char *f, va_list args) VErrorFSigSafe(const char *f, va_list args)
_X_ATTRIBUTE_PRINTF(1, 0); _X_ATTRIBUTE_PRINTF(1, 0);
extern _X_EXPORT void
ErrorFSigSafe(const char *f, ...)
_X_ATTRIBUTE_PRINTF(1, 2);
void void
LogPrintMarkers(void); LogPrintMarkers(void);
@ -391,5 +388,6 @@ typedef _sigset_t sigset_t;
/* should not be used anymore, just for backwards compat with drivers */ /* should not be used anymore, just for backwards compat with drivers */
#define LogVMessageVerbSigSafe(...) LogVMessageVerb(__VA_ARGS__) #define LogVMessageVerbSigSafe(...) LogVMessageVerb(__VA_ARGS__)
#define LogMessageVerbSigSafe(...) LogMessageVerb(__VA_ARGS__) #define LogMessageVerbSigSafe(...) LogMessageVerb(__VA_ARGS__)
#define ErrorFSigSafe(...) ErrorF(__VA_ARGS__)
#endif /* OS_H */ #endif /* OS_H */

View File

@ -225,21 +225,21 @@ mieqEnqueue(DeviceIntPtr pDev, InternalEvent *e)
*/ */
miEventQueue.dropped++; miEventQueue.dropped++;
if (miEventQueue.dropped == 1) { if (miEventQueue.dropped == 1) {
ErrorFSigSafe("[mi] EQ overflowing. Additional events will be " ErrorF("[mi] EQ overflowing. Additional events will be "
"discarded until existing events are processed.\n"); "discarded until existing events are processed.\n");
xorg_backtrace(); xorg_backtrace();
ErrorFSigSafe("[mi] These backtraces from mieqEnqueue may point to " ErrorF("[mi] These backtraces from mieqEnqueue may point to "
"a culprit higher up the stack.\n"); "a culprit higher up the stack.\n");
ErrorFSigSafe("[mi] mieq is *NOT* the cause. It is a victim.\n"); ErrorF("[mi] mieq is *NOT* the cause. It is a victim.\n");
} }
else if (miEventQueue.dropped % QUEUE_DROP_BACKTRACE_FREQUENCY == 0 && else if (miEventQueue.dropped % QUEUE_DROP_BACKTRACE_FREQUENCY == 0 &&
miEventQueue.dropped / QUEUE_DROP_BACKTRACE_FREQUENCY <= miEventQueue.dropped / QUEUE_DROP_BACKTRACE_FREQUENCY <=
QUEUE_DROP_BACKTRACE_MAX) { QUEUE_DROP_BACKTRACE_MAX) {
ErrorFSigSafe("[mi] EQ overflow continuing. %zu events have been " ErrorF("[mi] EQ overflow continuing. %zu events have been "
"dropped.\n", miEventQueue.dropped); "dropped.\n", miEventQueue.dropped);
if (miEventQueue.dropped / QUEUE_DROP_BACKTRACE_FREQUENCY == if (miEventQueue.dropped / QUEUE_DROP_BACKTRACE_FREQUENCY ==
QUEUE_DROP_BACKTRACE_MAX) { QUEUE_DROP_BACKTRACE_MAX) {
ErrorFSigSafe("[mi] No further overflow reports will be " ErrorF("[mi] No further overflow reports will be "
"reported until the clog is cleared.\n"); "reported until the clog is cleared.\n");
} }
xorg_backtrace(); xorg_backtrace();

View File

@ -82,21 +82,21 @@ print_registers(int frame, unw_cursor_t cursor)
frame++; frame++;
ret = unw_step(&cursor); ret = unw_step(&cursor);
if (ret < 0) { if (ret < 0) {
ErrorFSigSafe("unw_step failed: %s [%d]\n", unw_strerror(ret), ret); ErrorF("unw_step failed: %s [%d]\n", unw_strerror(ret), ret);
return; return;
} }
ErrorFSigSafe("\n"); ErrorF("\n");
ErrorFSigSafe("Registers at frame #%d:\n", frame); ErrorF("Registers at frame #%d:\n", frame);
for (i = 0; i < num_regs; i++) { for (i = 0; i < num_regs; i++) {
uint64_t val; uint64_t val;
ret = unw_get_reg(&cursor, regs[i].regnum, &val); ret = unw_get_reg(&cursor, regs[i].regnum, &val);
if (ret < 0) { if (ret < 0) {
ErrorFSigSafe("unw_get_reg(%s) failed: %s [%d]\n", ErrorF("unw_get_reg(%s) failed: %s [%d]\n",
regs[i].name, unw_strerror(ret), ret); regs[i].name, unw_strerror(ret), ret);
} else { } else {
ErrorFSigSafe(" %s: 0x%" PRIx64 "\n", regs[i].name, val); ErrorF(" %s: 0x%" PRIx64 "\n", regs[i].name, val);
} }
} }
} }
@ -117,26 +117,23 @@ xorg_backtrace(void)
pip.unwind_info = NULL; pip.unwind_info = NULL;
ret = unw_getcontext(&context); ret = unw_getcontext(&context);
if (ret) { if (ret) {
ErrorFSigSafe("unw_getcontext failed: %s [%d]\n", unw_strerror(ret), ErrorF("unw_getcontext failed: %s [%d]\n", unw_strerror(ret), ret);
ret);
return; return;
} }
ret = unw_init_local(&cursor, &context); ret = unw_init_local(&cursor, &context);
if (ret) { if (ret) {
ErrorFSigSafe("unw_init_local failed: %s [%d]\n", unw_strerror(ret), ErrorF("unw_init_local failed: %s [%d]\n", unw_strerror(ret), ret);
ret);
return; return;
} }
ErrorFSigSafe("\n"); ErrorF("\n");
ErrorFSigSafe("Backtrace:\n"); ErrorF("Backtrace:\n");
ret = unw_step(&cursor); ret = unw_step(&cursor);
while (ret > 0) { while (ret > 0) {
ret = unw_get_proc_info(&cursor, &pip); ret = unw_get_proc_info(&cursor, &pip);
if (ret) { if (ret) {
ErrorFSigSafe("unw_get_proc_info failed: %s [%d]\n", ErrorF("unw_get_proc_info failed: %s [%d]\n", unw_strerror(ret), ret);
unw_strerror(ret), ret);
break; break;
} }
@ -144,8 +141,7 @@ xorg_backtrace(void)
ret = unw_get_proc_name(&cursor, procname, 256, &off); ret = unw_get_proc_name(&cursor, procname, 256, &off);
if (ret && ret != -UNW_ENOMEM) { if (ret && ret != -UNW_ENOMEM) {
if (ret != -UNW_EUNSPEC) if (ret != -UNW_EUNSPEC)
ErrorFSigSafe("unw_get_proc_name failed: %s [%d]\n", ErrorF("unw_get_proc_name failed: %s [%d]\n", unw_strerror(ret), ret);
unw_strerror(ret), ret);
procname[0] = '?'; procname[0] = '?';
procname[1] = 0; procname[1] = 0;
} }
@ -163,22 +159,22 @@ xorg_backtrace(void)
signal_cursor = cursor; signal_cursor = cursor;
signal_frame = i; signal_frame = i;
ErrorFSigSafe("%u: <signal handler called>\n", i++); ErrorF("%u: <signal handler called>\n", i++);
} else { } else {
ErrorFSigSafe("%u: %s (%s%s+0x%x) [%p]\n", i++, filename, procname, ErrorF("%u: %s (%s%s+0x%x) [%p]\n", i++, filename, procname,
ret == -UNW_ENOMEM ? "..." : "", (int)off, ret == -UNW_ENOMEM ? "..." : "", (int)off,
(void *)(uintptr_t)(ip)); (void *)(uintptr_t)(ip));
} }
ret = unw_step(&cursor); ret = unw_step(&cursor);
if (ret < 0) if (ret < 0)
ErrorFSigSafe("unw_step failed: %s [%d]\n", unw_strerror(ret), ret); ErrorF("unw_step failed: %s [%d]\n", unw_strerror(ret), ret);
} }
if (signal_frame >= 0) if (signal_frame >= 0)
print_registers(signal_frame, signal_cursor); print_registers(signal_frame, signal_cursor);
ErrorFSigSafe("\n"); ErrorF("\n");
} }
#else /* HAVE_LIBUNWIND */ #else /* HAVE_LIBUNWIND */
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
@ -197,19 +193,19 @@ xorg_backtrace(void)
int size, i; int size, i;
Dl_info info; Dl_info info;
ErrorFSigSafe("\n"); ErrorF("\n");
ErrorFSigSafe("Backtrace:\n"); ErrorF("Backtrace:\n");
size = backtrace(array, BT_SIZE); size = backtrace(array, BT_SIZE);
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
int rc = dladdr(array[i], &info); int rc = dladdr(array[i], &info);
if (rc == 0) { if (rc == 0) {
ErrorFSigSafe("%u: ?? [%p]\n", i, array[i]); ErrorF("%u: ?? [%p]\n", i, array[i]);
continue; continue;
} }
mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)"; mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)";
if (info.dli_saddr) if (info.dli_saddr)
ErrorFSigSafe( ErrorF(
"%u: %s (%s+0x%x) [%p]\n", "%u: %s (%s+0x%x) [%p]\n",
i, i,
mod, mod,
@ -218,7 +214,7 @@ xorg_backtrace(void)
(char *) info.dli_saddr), (char *) info.dli_saddr),
array[i]); array[i]);
else else
ErrorFSigSafe( ErrorF(
"%u: %s (%p+0x%x) [%p]\n", "%u: %s (%p+0x%x) [%p]\n",
i, i,
mod, mod,
@ -227,7 +223,7 @@ xorg_backtrace(void)
(char *) info.dli_fbase), (char *) info.dli_fbase),
array[i]); array[i]);
} }
ErrorFSigSafe("\n"); ErrorF("\n");
} }
#else /* not glibc or glibc < 2.1 */ #else /* not glibc or glibc < 2.1 */
@ -265,7 +261,7 @@ xorg_backtrace_frame(uintptr_t pc, int signo, void *arg)
strcpy(signame, "unknown"); strcpy(signame, "unknown");
} }
ErrorFSigSafe("** Signal %u (%s)\n", signo, signame); ErrorF("** Signal %u (%s)\n", signo, signame);
} }
snprintf(header, sizeof(header), "%d: 0x%lx", depth, pc); snprintf(header, sizeof(header), "%d: 0x%lx", depth, pc);
@ -283,8 +279,7 @@ xorg_backtrace_frame(uintptr_t pc, int signo, void *arg)
symname = "<section start>"; symname = "<section start>";
offset = pc - (uintptr_t) dlinfo.dli_fbase; offset = pc - (uintptr_t) dlinfo.dli_fbase;
} }
ErrorFSigSafe("%s: %s:%s+0x%x\n", header, dlinfo.dli_fname, symname, ErrorF("%s: %s:%s+0x%x\n", header, dlinfo.dli_fname, symname, offset);
offset);
} }
else { else {
@ -292,7 +287,7 @@ xorg_backtrace_frame(uintptr_t pc, int signo, void *arg)
* probably poke elfloader here, but haven't written that code yet, * probably poke elfloader here, but haven't written that code yet,
* so we just print the pc. * so we just print the pc.
*/ */
ErrorFSigSafe("%s\n", header); ErrorF("%s\n", header);
} }
return 0; return 0;
@ -346,7 +341,7 @@ xorg_backtrace_pstack(void)
if (bytesread > 0) { if (bytesread > 0) {
btline[bytesread] = 0; btline[bytesread] = 0;
ErrorFSigSafe("%s", btline); ErrorF("%s", btline);
} }
else if ((bytesread < 0) || ((errno != EINTR) && (errno != EAGAIN))) else if ((bytesread < 0) || ((errno != EINTR) && (errno != EAGAIN)))
done = 1; done = 1;
@ -366,8 +361,8 @@ void
xorg_backtrace(void) xorg_backtrace(void)
{ {
ErrorFSigSafe("\n"); ErrorF("\n");
ErrorFSigSafe("Backtrace:\n"); ErrorF("Backtrace:\n");
#ifdef HAVE_PSTACK #ifdef HAVE_PSTACK
/* First try fork/exec of pstack - otherwise fall back to walkcontext /* First try fork/exec of pstack - otherwise fall back to walkcontext
@ -384,9 +379,9 @@ xorg_backtrace(void)
walkcontext(&u, xorg_backtrace_frame, &depth); walkcontext(&u, xorg_backtrace_frame, &depth);
else else
#endif #endif
ErrorFSigSafe("Failed to get backtrace info: %s\n", strerror(errno)); ErrorF("Failed to get backtrace info: %s\n", strerror(errno));
} }
ErrorFSigSafe("\n"); ErrorF("\n");
} }
#else #else

View File

@ -863,9 +863,9 @@ FatalError(const char *f, ...)
static Bool beenhere = FALSE; static Bool beenhere = FALSE;
if (beenhere) if (beenhere)
ErrorFSigSafe("\nFatalError re-entered, aborting\n"); ErrorF("\nFatalError re-entered, aborting\n");
else else
ErrorFSigSafe("\nFatal server error:\n"); ErrorF("\nFatal server error:\n");
va_start(args, f); va_start(args, f);
@ -884,7 +884,7 @@ FatalError(const char *f, ...)
#endif #endif
VErrorFSigSafe(f, args); VErrorFSigSafe(f, args);
va_end(args); va_end(args);
ErrorFSigSafe("\n"); ErrorF("\n");
if (!beenhere) if (!beenhere)
OsVendorFatalError(f, args2); OsVendorFatalError(f, args2);
va_end(args2); va_end(args2);
@ -921,16 +921,6 @@ VErrorFSigSafe(const char *f, va_list args)
LogVMessageVerb(X_ERROR, -1, f, args); LogVMessageVerb(X_ERROR, -1, f, args);
} }
void
ErrorFSigSafe(const char *f, ...)
{
va_list args;
va_start(args, f);
VErrorFSigSafe(f, args);
va_end(args);
}
void void
LogPrintMarkers(void) LogPrintMarkers(void)
{ {

View File

@ -137,7 +137,7 @@ OsSigHandler(int signo)
#ifdef SA_SIGINFO #ifdef SA_SIGINFO
if (sip->si_code == SI_USER) { if (sip->si_code == SI_USER) {
ErrorFSigSafe("Received signal %u sent by process %u, uid %u\n", signo, ErrorF("Received signal %u sent by process %u, uid %u\n", signo,
sip->si_pid, sip->si_uid); sip->si_pid, sip->si_uid);
} }
else { else {
@ -146,7 +146,7 @@ OsSigHandler(int signo)
case SIGBUS: case SIGBUS:
case SIGILL: case SIGILL:
case SIGFPE: case SIGFPE:
ErrorFSigSafe("%s at address %p\n", strsignal(signo), sip->si_addr); ErrorF("%s at address %p\n", strsignal(signo), sip->si_addr);
} }
} }
#endif #endif