35 #if defined (SERVER_MODE) 41 #if !defined (WINDOWS) 46 #if !defined (SERVER_MODE) 50 #if !defined (WINDOWS) && defined (SERVER_MODE) 67 #if defined (SERVER_MODE) && !defined (WINDOWS) 79 #if !defined (WINDOWS) 83 #include <sys/types.h> 85 #if !defined (WINDOWS) 89 #if !defined (WINDOWS) 135 syslog (
long priority,
const char *message, ...)
150 static const char *
er_severity_string[] = {
"FATAL ERROR",
"ERROR",
"SYNTAX ERROR",
"WARNING",
"NOTIFICATION" };
154 #define ER_SEVERITY_STRING(severity) \ 155 (((severity) >= ER_FATAL_ERROR_SEVERITY && (severity) <= ER_MAX_SEVERITY) \ 156 ? er_severity_string[severity] : er_unknown_severity) 158 #define ER_ERROR_WARNING_STRING(severity) \ 159 (((severity) >= ER_FATAL_ERROR_SEVERITY && (severity) < ER_WARNING_SEVERITY) \ 160 ? er_severity_string[ER_ERROR_SEVERITY] : "") 169 #define ER_INTERNAL_MSG_SET 2 171 #define PRM_ER_MSGLEVEL 0 173 #define ER_MALLOC(size) er_malloc_helper ((size), __FILE__, __LINE__) 175 #define SPEC_CODE_LONGLONG ((char)0x88) 176 #define SPEC_CODE_SIZE_T ((char)0x89) 178 #define MAX_LINE 4096 223 "Error in error subsystem (line %d): ",
234 "No error message available.",
236 "Can't allocate %d bytes.",
238 "Can't find message catalog files.",
240 "Missing message for error code %d.",
242 "\n... ABORT/EXIT IMMEDIATELY ...\n",
244 "Do you want to exit? 1/0 ",
248 "No message available; original message format in error.",
250 "er_init: *** Incorrect exit_ask value = %d; will assume %s instead. ***\n",
252 "er_init: *** WARNING: Unable to open message log \"%s\"; will assume stderr instead. ***\n",
254 "er_study_fmt: suspect message for error code %d.",
256 "er_estimate_size: unknown conversion code (%d).",
258 "\n\n*** Message log wraparound. Messages will continue at top of the file. ***\n\n",
260 "\nTime: %s - %s *** %s CODE = %d, Tran = %d%s\n%s\n",
262 "CUBRID (pid: %d) *** %s *** %s CODE = %d, Tran = %d, %s",
264 "\nTime: %s - %s *** file %s, line %d %s CODE = %d, Tran = %d%s\n%s\n",
266 "CUBRID (pid: %d) *** %s *** file %s, line %d, %s CODE = %d, Tran = %d. %s",
268 "\n*** The previous error message is the last one. ***\n\n",
270 "\nTime: %s - DEBUG *** file %s, line %d\n",
272 "Mail -s \"CUBRID has been stopped\" ",
274 "--->>>\n%s has been stopped at your request when the following error was set:\nerrid = %d, %s\nUser: %s, pid: %d, host: %s, time: %s<<<---",
276 "%s has been stopped on errid = %d. User: %s, pid: %d",
278 "er_init: cannot install event handler \"%s\"" 285 #define ER_MSG_LOG_FILE_SUFFIX ".err" 291 #define ER_ACCESS_LOG_FILE_SUFFIX ".access" 300 #if !defined (SERVER_MODE) 322 #if defined (CS_MODE) 323 static bool er_Ignore_uninit =
false;
326 #if !defined (SERVER_MODE) 329 #endif // not SERVER_MODE 336 #if defined (SERVER_MODE) || defined (SA_MODE) 337 static void er_set_access_log_filename (
void);
347 bool include_os_error, FILE * fp, va_list * ap_ptr);
351 static int er_study_spec (
const char *conversion_spec,
char *simple_spec,
int *position,
int *width,
int *va_class);
359 static void *
er_malloc_helper (std::size_t size,
const char *file,
int line);
360 static void er_emergency (
const char *file,
int line,
const char *fmt, ...);
364 static int er_fname_free (
const void *key,
void *data,
void *args);
367 static void _er_log_debug_internal (
const char *file_name,
const int line_no,
const char *fmt, va_list * ap);
396 _longjmp (er_Event_jmp_buf, 1);
407 const char *file_name, *msg;
409 if (er_Event_pipe ==
NULL || er_Event_started ==
false)
415 er_all (&err_id, &severity, &nlevels, &line_no, &file_name, &msg);
417 #if !defined(WINDOWS) 420 if (_setjmp (er_Event_jmp_buf) == 0)
423 fflush (er_Event_pipe);
427 er_Event_started =
false;
428 if (er_Hasalready_initiated)
432 if (er_Event_pipe !=
NULL)
434 fclose (er_Event_pipe);
435 er_Event_pipe =
NULL;
438 #if !defined(WINDOWS) 452 #if !defined(WINDOWS) 455 if (_setjmp (er_Event_jmp_buf) == 0)
457 er_Event_started =
false;
458 if (er_Event_pipe !=
NULL)
460 if (er_Hasalready_initiated)
468 fflush (er_Event_pipe);
469 pclose (er_Event_pipe);
470 er_Event_pipe =
NULL;
474 if (er_Event_pipe !=
NULL)
476 if (er_Hasalready_initiated)
484 fflush (er_Event_pipe);
485 er_Event_started =
true;
489 if (er_Hasalready_initiated)
499 if (er_Hasalready_initiated)
503 if (er_Event_pipe !=
NULL)
505 fclose (er_Event_pipe);
506 er_Event_pipe =
NULL;
510 #if !defined(WINDOWS) 525 #if !defined(WINDOWS) 528 if (_setjmp (er_Event_jmp_buf) == 0)
530 er_Event_started =
false;
531 if (er_Event_pipe !=
NULL)
533 if (er_Hasalready_initiated)
541 fflush (er_Event_pipe);
542 pclose (er_Event_pipe);
543 er_Event_pipe =
NULL;
548 if (er_Hasalready_initiated)
552 if (er_Event_pipe !=
NULL)
554 fclose (er_Event_pipe);
555 er_Event_pipe =
NULL;
558 #if !defined(WINDOWS) 572 if (fname_table ==
NULL)
589 if (fname_table ==
NULL)
613 #if defined (SERVER_MODE) || defined (SA_MODE) 619 er_set_access_log_filename (
void)
622 std::size_t len, suffix_len;
624 if (er_Msglog_filename ==
NULL)
626 er_Accesslog_filename =
NULL;
633 if (len < suffix_len || strncmp (&er_Msglog_filename[len - suffix_len],
ER_MSG_LOG_FILE_SUFFIX, suffix_len) != 0)
637 er_Accesslog_filename =
NULL;
644 strncpy (tmp, er_Msglog_filename, PATH_MAX);
645 tmp[len - suffix_len] =
'\0';
648 er_Accesslog_filename =
NULL;
657 if (strnlen (er_Accesslog_filename_buff, PATH_MAX) >= PATH_MAX)
659 er_Accesslog_filename =
NULL;
678 er_init (
const char *msglog_filename,
int exit_ask)
684 if (er_Has_sticky_init)
686 assert (er_Hasalready_initiated);
691 if (er_Hasalready_initiated)
713 if (msg_catd !=
NULL)
715 er_Fmt_msg_fail_count = 0;
719 if (msg ==
NULL || msg[0] ==
'\0')
721 er_Fmt_msg_fail_count++;
728 er_Fmt_msg_fail_count++;
738 er_Hasalready_initiated =
true;
745 er_Has_sticky_init = (msglog_filename !=
NULL);
747 #if !defined (SERVER_MODE) 749 er_Singleton_context_p =
new context ();
752 #endif // not SERVER_MODE 760 er_Exit_ask = exit_ask;
766 ((er_Exit_ask ==
ER_EXIT_ASK) ?
"ER_EXIT_ASK" :
"ER_NEVER_EXIT"));
784 if (msglog_filename ==
NULL)
797 if (msglog_filename !=
NULL)
801 strncpy (er_Msglog_filename_buff, msglog_filename, PATH_MAX - 1);
808 er_Msglog_filename_buff[PATH_MAX - 1] =
'\0';
813 er_Msglog_filename =
NULL;
816 #if defined (SERVER_MODE) || defined (SA_MODE) 817 er_set_access_log_filename ();
821 if (er_Logfile_opened ==
false)
823 if (er_Msglog_filename)
827 if (er_Isa_null_device)
834 const char *er_file_path;
844 sprintf (path,
"%s.%d", er_Msglog_filename, getpid ());
850 #if !defined (WINDOWS) && defined (SERVER_MODE) 851 if (er_Msglog_fh !=
NULL)
858 if (er_Msglog_fh ==
NULL)
860 er_Msglog_fh = stderr;
866 er_Msglog_fh = stderr;
869 if (er_Accesslog_filename)
873 if (er_Isa_null_device)
880 const char *ac_file_path;
890 sprintf (path,
"%s.%d", er_Accesslog_filename, getpid ());
896 #if !defined (WINDOWS) && defined (SERVER_MODE) 897 if (er_Accesslog_fh !=
NULL)
904 if (er_Accesslog_fh ==
NULL)
906 er_Accesslog_fh = stderr;
912 er_Accesslog_fh = stderr;
915 er_Logfile_opened =
true;
918 log_file_lock.unlock ();
932 else if (er_Is_cached_msg ==
false)
941 for (i = 1; i < (int) DIM (er_Cached_msg); i++)
953 er_Cached_msg[
i] = tmp;
958 er_Is_cached_msg =
true;
989 er_Print_to_console = print_console;
1001 char dir[PATH_MAX], *tpath;
1008 if (
cub_dirname_r (tpath, dir, PATH_MAX) > 0 && access (dir, F_OK) < 0)
1010 if (mkdir (dir, 0777) < 0 && errno == ENOENT)
1022 fp = fopen (path,
"r+");
1025 fseek (fp, 0, SEEK_END);
1034 fp = fopen (path,
"w");
1047 #if defined(WINDOWS) 1048 const char *null_dev =
"NUL";
1050 const char *null_dev =
"/dev/null";
1053 if (path !=
NULL && strcmp (path, null_dev) == 0)
1066 char backup_file[PATH_MAX];
1073 sprintf (backup_file,
"%s.bak", path);
1074 (void) unlink (backup_file);
1075 (void) rename (path, backup_file);
1077 return fopen (path,
"w");
1080 #if !defined (WINDOWS) && defined (SERVER_MODE) 1090 er_file_create_link_to_current_log_file (
const char *log_file_path,
const char *suffix)
1093 char link_path[PATH_MAX];
1094 char link_dir_path[PATH_MAX];
1100 if (*db_name ==
'\0')
1108 if (snprintf (link_path, PATH_MAX,
"%s%c%s_latest%s", link_dir_path,
PATH_SEPARATOR, db_name, suffix) >= PATH_MAX)
1114 (void) unlink (link_path);
1115 symlink (log_file_path, link_path);
1131 if (!er_Hasalready_initiated)
1139 #if !defined (SERVER_MODE) 1143 er_Singleton_context_p =
NULL;
1144 #endif // not SERVER_MODE 1153 if (er_Logfile_opened ==
true)
1155 if (er_Msglog_fh !=
NULL && er_Msglog_fh != stderr)
1158 er_Msglog_fh =
NULL;
1161 er_Logfile_opened =
false;
1163 if (er_Accesslog_fh !=
NULL && er_Accesslog_fh != stderr)
1166 er_Accesslog_fh =
NULL;
1171 log_file_lock.unlock ();
1178 for (i = 0; i < (int) DIM (er_Cached_msg); i++)
1189 er_Hasalready_initiated =
false;
1190 er_Has_sticky_init =
false;
1208 context::get_thread_local_context ().clear_current_error_level ();
1232 va_start (ap, num_args);
1233 (void)
er_set_internal (severity, file_name, line_no, err_id, num_args,
false,
NULL, &ap);
1260 va_start (ap, num_args);
1261 (void)
er_set_internal (severity, file_name, line_no, err_id, num_args,
false, fp, &ap);
1289 va_start (ap, num_args);
1304 err_id = abs (err_id);
1335 FILE *out = (er_Msglog_fh !=
NULL) ? er_Msglog_fh : stderr;
1337 fprintf (out,
"\n");
1351 err_id = abs (err_id);
1387 bool include_os_error, FILE * fp, va_list * ap_ptr)
1390 const char *os_error;
1391 std::size_t new_size;
1394 bool need_stack_pop =
false;
1406 if (er_Hasalready_initiated ==
false)
1408 #if defined (CS_MODE) && !defined (NDEBUG) 1410 if (er_Ignore_uninit)
1416 er_Errid_not_initialized =
err_id;
1421 context &tl_context = context::get_thread_local_context ();
1428 os_error = (include_os_error && errno != 0) ? strerror (errno) :
NULL;
1430 memcpy (&ap, ap_ptr,
sizeof (ap));
1442 need_stack_pop =
true;
1451 crt_error.
set_error (err_id, severity, file_name, line_no);
1478 new_size += 4 +
strlen (os_error);
1490 if (os_error !=
NULL)
1492 strcat (crt_error.
msg_area,
"... ");
1493 strcat (crt_error.
msg_area, os_error);
1499 && er_Fnlog[severity] !=
NULL)
1516 if (fseek (fp, 0L, SEEK_SET) == 0)
1521 fprintf (er_Msglog_fh,
"%s", buf);
1523 (void) fflush (er_Msglog_fh);
1527 log_file_lock.unlock ();
1531 fprintf (stderr,
"%s\n", crt_error.
msg_area);
1570 #if !defined (WINDOWS) 1574 (void) fprintf (stderr,
"%s", er_Cached_msg[
ER_ER_ASK]);
1575 if (scanf (
"%d", &exit_requested) != 1)
1577 exit_requested =
TRUE;
1582 exit (EXIT_FAILURE);
1601 const char *file_name;
1606 struct tm *er_tm_p = &er_tm;
1608 char time_array[256];
1613 const char *log_file_name;
1614 const char *log_file_suffix;
1632 if (log_fh ==
NULL || *log_fh ==
NULL)
1640 er_all (&err_id, &severity, &nlevels, &line_no, &file_name, &msg);
1647 (void) fflush (*log_fh);
1650 if (!er_Isa_null_device)
1654 if (*log_fh ==
NULL)
1659 #if !defined (WINDOWS) && defined (SERVER_MODE) 1662 er_file_create_link_to_current_log_file (log_file_name, log_file_suffix);
1669 (void) fseek (*log_fh, 0L, SEEK_SET);
1673 if (*log_fh == stderr || *log_fh == stdout)
1679 (void) fflush (stderr);
1680 (void) fflush (stdout);
1685 er_time = time (
NULL);
1686 er_tm_p = localtime_r (&er_time, &er_tm);
1687 if (er_tm_p ==
NULL)
1689 strcpy (time_array,
"00/00/00 00:00:00.000");
1693 gettimeofday (&tv,
NULL);
1694 snprintf (time_array + strftime (time_array, 128,
"%m/%d/%y %H:%M:%S", er_tm_p), 255,
".%03ld",
1698 more_info_p = (
char *)
"";
1705 #if defined (SERVER_MODE) 1708 const char *user_name =
NULL;
1709 const char *host_name =
NULL;
1712 if (logtb_find_client_tran_name_host_pid (tran_index, &prog_name, &user_name, &host_name, &pid) ==
NO_ERROR)
1714 ret = snprintf (more_info,
sizeof (more_info),
", CLIENT = %s:%s(%d), EID = %u",
1715 host_name ? host_name :
"unknown", prog_name ? prog_name :
"unknown", pid, er_Eid);
1718 more_info_p = &more_info[0];
1724 ret = snprintf (more_info,
sizeof (more_info),
", EID = %u", er_Eid);
1727 more_info_p = &more_info[0];
1730 if (er_Handler !=
NULL)
1737 if ((access (log_file_name, F_OK) == -1) && *log_fh != stderr && *log_fh != stdout)
1739 (void) fclose (*log_fh);
1742 if (*log_fh ==
NULL)
1754 (void) fflush (*log_fh);
1756 if (*log_fh != stderr || *log_fh != stdout)
1758 position = ftell (*log_fh);
1760 (void) fflush (*log_fh);
1761 (void) fseek (*log_fh, position, SEEK_SET);
1768 switch (er_Exit_ask)
1775 #if defined (NDEBUG) 1781 (void) fprintf (er_Msglog_fh,
"%s", er_Cached_msg[
ER_ER_EXIT]);
1782 (void) fflush (er_Msglog_fh);
1784 exit (EXIT_FAILURE);
1797 #if !defined (SERVER_MODE) 1801 er_Handler = handler;
1822 if (!er_Hasalready_initiated)
1824 #if defined (CS_MODE) && !defined (NDEBUG) 1826 if (er_Ignore_uninit)
1835 return context::get_thread_local_error ().err_id;
1849 er_message &crt_error = context::get_thread_local_error ();
1863 #if defined (CS_MODE) && !defined (NDEBUG) 1865 if (!er_Hasalready_initiated && er_Ignore_uninit)
1870 assert (er_Hasalready_initiated);
1872 context::get_thread_local_error ().err_id =
NO_ERROR;
1884 #if defined (CS_MODE) && !defined (NDEBUG) 1886 if (!er_Hasalready_initiated && er_Ignore_uninit)
1891 assert (er_Hasalready_initiated);
1893 context::get_thread_local_error ().err_id =
err_id;
1903 return context::get_thread_local_error ().severity;
1928 #if defined (CS_MODE) && !defined (NDEBUG) 1930 if (!er_Hasalready_initiated && er_Ignore_uninit)
1932 return "Not available";
1936 if (!er_Hasalready_initiated)
1939 return "Not available";
1943 er_message &crt_error = context::get_thread_local_error ();
1971 er_message &crt_error = context::get_thread_local_error ();
1974 *err_id = crt_error.
err_id;
1996 #if defined (CS_MODE) && !defined (NDEBUG) 1998 if (!er_Hasalready_initiated && er_Ignore_uninit)
2004 assert (er_Hasalready_initiated);
2032 struct tm *er_tm_p = &er_tm;
2034 char time_array[256];
2036 if (er_Hasalready_initiated ==
false)
2042 out = (er_Msglog_fh !=
NULL) ? er_Msglog_fh : stderr;
2044 er_time = time (
NULL);
2046 er_tm_p = localtime_r (&er_time, &er_tm);
2047 if (er_tm_p ==
NULL)
2049 strcpy (time_array,
"00/00/00 00:00:00.000");
2053 gettimeofday (&tv,
NULL);
2054 snprintf (time_array + strftime (time_array, 128,
"%m/%d/%y %H:%M:%S", er_tm_p), 255,
".%03ld",
2061 vfprintf (out, fmt, *ap);
2088 std::size_t len, max_msglen;
2095 er_message &crt_error = context::get_thread_local_error ();
2102 len = MIN (len, *length);
2103 *length = (int) len;
2118 strncpy (ptr, msg, max_msglen);
2119 *(ptr + max_msglen) =
'\0';
2137 std::size_t length = 0;
2139 if (server_area ==
NULL)
2146 er_message &crt_error = context::get_thread_local_error ();
2165 crt_error.
file_name =
"Unknown from server";
2170 length =
strlen (ptr) + 1;
2173 memcpy (crt_error.
msg_area, ptr, length);
2178 && er_Fnlog[severity] !=
NULL)
2186 log_file_lock.unlock ();
2190 fprintf (stderr,
"%s\n", crt_error.
msg_area);
2214 (void) context::get_thread_local_context ().push_error_stack ();
2228 context &tl_context = context::get_thread_local_context ();
2253 context::get_thread_local_context ().pop_error_stack_and_destroy ();
2265 context &tl_context = context::get_thread_local_context ();
2303 context &tl_context = context::get_thread_local_context ();
2323 context &tl_context = context::get_thread_local_context ();
2350 er_study_spec (
const char *conversion_spec,
char *simple_spec,
int *position,
int *width,
int *va_class)
2354 int n, code, class_;
2359 simple_spec[0] =
'%';
2360 p = &simple_spec[1];
2361 q = conversion_spec;
2367 while (*q ==
'-' || *q ==
'+' || *q ==
' ' || *q ==
'#')
2399 p = &simple_spec[1];
2404 while (*q ==
'-' || *q ==
'+' || *q ==
' ' || *q ==
'#')
2437 if (*q ==
'l' && *(q + 1) ==
'l')
2448 #if defined (WINDOWS) 2451 #elif defined (__GNUC__) 2454 if (
sizeof (
size_t) ==
sizeof (
long long int))
2534 int width, va_class;
2540 for (p = strchr (fmt->
fmt,
'%'); p; p = strchr (p,
'%'))
2573 size = (n + 1) *
sizeof (
ER_SPEC);
2575 if (new_spec ==
NULL)
2580 fmt->
spec = new_spec;
2598 for (i = 0; i < fmt->
nspecs; i++)
2611 #define MAX_INT_WIDTH 20 2612 #define MAX_DOUBLE_WIDTH 32 2646 memcpy (&args, ap,
sizeof (args));
2650 for (i = 0; i < fmt->
nspecs; i++)
2655 (void) va_arg (args,
int);
2660 (void) va_arg (args,
long long int);
2665 if (
sizeof (
size_t) ==
sizeof (
long long int))
2667 (void) va_arg (args,
long long int);
2671 (void) va_arg (args,
int);
2677 (void) va_arg (args,
void *);
2682 (void) va_arg (args,
double);
2687 (void) va_arg (args,
long double);
2692 str = va_arg (args,
char *);
2708 len += MAX (width, n);
2744 if (er_Fmt_msg_fail_count > 0)
2746 log_msg_cache.lock ();
2751 assert (er_Fmt_msg_fail_count > 0);
2754 if (msg ==
NULL || msg[0] ==
'\0')
2773 if (fmt->
nspecs != num_args)
2779 er_Fmt_msg_fail_count--;
2788 std::size_t msg_length;
2790 msg_length =
strlen (msg);
2802 strcpy (fmt->
fmt, msg);
2868 fmt->
fmt = (
char *) er_Cached_msg[msg_num];
2885 mem = malloc (size);
2910 const char *str, *
p, *q;
2915 er_message &crt_error = context::get_thread_local_error ();
2927 va_start (args, fmt);
2931 while ((q = strchr (p,
'%')) && limit > 0)
2937 span = MIN (limit, span);
2938 strncat (crt_error.
msg_area, p, span);
2948 sprintf (buf,
"%d", va_arg (args,
int));
2954 sprintf (buf,
"%d", va_arg (args,
int));
2963 str = va_arg (args,
const char *);
2976 strncat (crt_error.
msg_area, str, limit);
2977 limit -= (int)
strlen (str);
2978 limit = MAX (limit, 0);
2988 strncat (crt_error.
msg_area, p, limit);
3032 memcpy (&args, ap,
sizeof (args));
3062 for (i = 0; i < fmt->
nspecs; i++)
3073 if (
sizeof (
size_t) ==
sizeof (
long long int))
3122 while ((q = strchr (p,
'%')))
3128 strncpy (s, p, q - p);
3155 n = (*q ==
'$' && n) ? (n - 1) :
i;
3170 if (
sizeof (
size_t) ==
sizeof (
long long int))
3204 p += strcspn (p,
"cdiopsuxXefgEFG") + 1;
3236 #if defined (CS_MODE) 3238 er_set_ignore_uninit (
bool ignore)
3240 er_Ignore_uninit = ignore;
3255 manager::~manager (
void)
char * envvar_logdir_file(char *path, size_t size, const char *filename)
static int er_Errid_not_initialized
static const char * er_Builtin_msg[]
static void * er_malloc_helper(std::size_t size, const char *file, int line)
MSG_CATD msgcat_get_descriptor(int cat_id)
void er_setid(int err_id)
static ER_FMT * er_find_fmt(int err_id, int num_args)
static FILE * er_Event_pipe
static FILE * er_Msglog_fh
static FILE * er_file_backup(FILE *fp, const char *path)
const char * string_value
const char * boot_db_name(void)
static er_log_handler_t er_Handler
static void _er_log_debug_internal(const char *file_name, const int line_no, const char *fmt, va_list *ap)
static char er_Msglog_filename_buff[PATH_MAX]
static void er_log(int err_id)
#define assert_release(e)
char * er_get_area_error(char *buffer, int *length)
er_message & get_current_error_level(void)
static ER_FMT * er_create_fmt_msg(ER_FMT *fmt, int err_id, const char *msg)
#define ER_EV_BROKEN_PIPE
static char er_Accesslog_filename_buff[PATH_MAX]
static void er_init_fmt(ER_FMT *fmt)
static context * er_Singleton_context_p
void er_restore_last_error(void)
static size_t er_estimate_size(ER_FMT *fmt, va_list *ap)
static FILE * er_Accesslog_fh
#define er_log_debug(...)
#define ER_BO_CLIENT_CONNECTED
void pop_error_stack_and_destroy(void)
void _er_log_debug(const char *file_name, const int line_no, const char *fmt,...)
int er_init(const char *msglog_filename, int exit_ask)
static int er_vsprintf(er_message *er_entry_p, ER_FMT *fmt, va_list *ap)
static bool er_Hasalready_initiated
static bool er_Event_started
void er_set_print_property(int print_console)
void register_thread_local(void)
const char * er_get_msglog_filename(void)
void pop_error_stack(er_message &popped)
void er_stack_pop_and_keep_error(void)
int er_get_severity(void)
long double longdouble_value
void mht_destroy(MHT_TABLE *ht)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
#define ER_TP_INCOMPATIBLE_DOMAINS
void er_final(ER_FINAL_CODE do_global_final)
static bool er_is_error_severity(er_severity severity)
#define ASSERT_ALIGN(ptr, alignment)
#define ER_ACCESS_LOG_FILE_SUFFIX
#define ER_EV_CONNECT_HANDLER
std::mutex er_Message_cache_mutex
int prm_get_integer_value(PARAM_ID prm_id)
int er_set_area_error(char *server_area)
static PTR_FNERLOG er_Fnlog[ER_MAX_SEVERITY+1]
void er_set_with_file(int severity, const char *file_name, const int line_no, int err_id, FILE *fp, int num_args,...)
#define ER_FK_CANT_ASSIGN_CACHE_ATTR
void er_stack_clearall(void)
static er_message & get_thread_local_error(void)
static SIGNAL_HANDLER_FUNCTION saved_Sig_handler
static void er_clear_fmt(ER_FMT *fmt)
static const char * er_Accesslog_filename
#define MSGCAT_SET_INTERNAL
int cub_dirname_r(const char *path, char *pathbuf, size_t buflen)
const char * rel_name(void)
static const char * er_unknown_severity
char * msgcat_gets(MSG_CATD msg_catd, int set_id, int msg_id, const char *s)
const char * er_msg(void)
bool has_error_stack(void)
static char * er_Cached_msg[sizeof(er_Builtin_msg)/sizeof(const char *)]
#define ER_SEVERITY_STRING(severity)
char * er_get_ermsg_from_area_error(char *buffer)
MHT_TABLE * mht_create(const char *name, int est_size, unsigned int(*hash_func)(const void *key, unsigned int ht_size), int(*cmp_func)(const void *key1, const void *key2))
static int er_Fmt_msg_fail_count
#define ER_CT_REPRCNT_OVERFLOW
unsigned int mht_5strhash(const void *key, const unsigned int ht_size)
static const char * er_severity_string[]
void er_set_with_oserror(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
#define MSGCAT_CATALOG_CUBRID
const bool & get_logging(void)
static ER_FMT er_Fmt_list[(-ER_LAST_ERROR)+1]
#define ER_FK_CANT_DROP_CACHE_ATTR
static void er_event_final(void)
static void er_notify_event_on_error(int err_id)
#define ER_ERROR_WARNING_STRING(severity)
static void error(const char *msg)
void push_error_stack(void)
static bool er_Has_sticky_init
void deregister_thread_local(void)
static FILE * er_file_open(const char *path)
static bool er_Logfile_opened
void er_print_callstack(const char *file_name, const int line_no, const char *fmt,...)
void reserve_message_area(std::size_t size)
er_log_handler_t er_register_log_handler(er_log_handler_t handler)
#define ER_MSG_LOG_FILE_SUFFIX
static void er_event_sigpipe_handler(int sig)
int er_errid_if_has_error(void)
#define free_and_init(ptr)
static bool er_Isa_null_device
static int er_call_stack_init(void)
char * prm_get_string_value(PARAM_ID prm_id)
static int er_set_internal(int severity, const char *file_name, const int line_no, int err_id, int num_args, bool include_os_error, FILE *fp, va_list *ap_ptr)
static void er_internal_msg(ER_FMT *fmt, int code, int msg_num)
bool prm_get_bool_value(PARAM_ID prm_id)
#define SPEC_CODE_LONGLONG
#define OR_PUT_INT(ptr, val)
void set_error(int error_id, int error_severity, const char *filename, int line_no)
void(* er_log_handler_t)(unsigned int)
#define ER_SM_CATALOG_SPACE
static int er_fname_free(const void *key, void *data, void *args)
static int er_study_spec(const char *conversion_spec, char *simple_spec, int *position, int *width, int *va_class)
static void er_stop_on_error(void)
int mht_map(const MHT_TABLE *ht, int(*map_func)(const void *key, void *data, void *args), void *func_args)
char * msgcat_message(int cat_id, int set_id, int msg_id)
void(* PTR_FNERLOG)(int err_id)
static void er_event(void)
char * strdup(const char *str)
static const char * er_Msglog_filename
void er_all(int *err_id, int *severity, int *n_levels, int *line_no, const char **file_name, const char **error_msg)
static void er_call_stack_final(void)
static void er_study_fmt(ER_FMT *fmt)
static unsigned int er_Eid
void er_stack_push_if_exists(void)
static int er_Print_to_console
static void er_emergency(const char *file, int line, const char *fmt,...)
#define CUB_MAXHOSTNAMELEN
static jmp_buf er_Event_jmp_buf
void er_dump_call_stack(FILE *outfp)
static void er_call_stack_dump_on_error(int severity, int err_id)
static bool er_file_isa_null_device(const char *path)
std::mutex er_Log_file_mutex
#define ER_QPROC_OVERFLOW_COERCION
void(* SIGNAL_HANDLER_FUNCTION)(int sig_no)
bool er_is_initialized(void)
int mht_compare_strings_are_equal(const void *key1, const void *key2)
bool sysprm_find_err_in_integer_list(PARAM_ID prm_id, int error_code)
static bool er_Is_cached_msg
SIGNAL_HANDLER_FUNCTION os_set_signal_handler(const int sig_no, SIGNAL_HANDLER_FUNCTION sig_handler)
enum er_final_code ER_FINAL_CODE
#define ER_CT_UNKNOWN_CLASSID
static int er_event_init(void)
std::size_t msg_area_size