/* set logfile to stderr by default */
lc->logfile = STDERR_FILENO;
-
+#if 0
/* duplicate stdout, stderr */
fd = dup(STDOUT_FILENO);
if (fd < 0){
return -1;
}
lc->stderr_orig = fd;
-
+#endif
lc->log_level = log_level;
if (!logfile || !logfile[0]) {
- lc->logfile = lc->stderr_orig;
+// lc->logfile = lc->stderr_orig;
return 0;
}
lc->filename[MAX_LOGFILE_LEN - 1] = 0;
fd = open(lc->filename, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR);
if (fd < 1){
- lc->logfile = lc->stderr_orig;
+// lc->logfile = lc->stderr_orig;
return -1;
}
lc->logfile = fd;
if (r < 0){
if (errno == EBADF)
fd = *(volatile int *)&lc->logfile;
- else
+ else {
//XSEGLOG("Error while writing log");
break;
+ }
+ } else {
+ sum += r;
}
- sum += r;
} while (sum < count);
+ /* No need to check for error */
+ //fsync(fd);
va_end(ap);
return;
}
+/* FIXME: This is not async safe */
void xseg_printtrace(void)
{
- void *array[10];
+ void *array[20];
size_t size;
- char **strings;
- int i;
-
- size = backtrace (array, 10);
- strings = backtrace_symbols (array, size);
-
- XSEGLOG("Obtained %zd stack frames.\n", size);
-
- for (i = 0; i < size; i++)
- XSEGLOG ("%s\n", strings[i]);
- free (strings);
+ XSEGLOG("Backtrace:");
+ size = backtrace(array, 20);
+ /* stderr should be open since we don't close it */
+ backtrace_symbols_fd(array, size, 2);
}