Allman indentation style applied.

This commit is contained in:
Johan Wikman
2015-10-21 13:17:50 +03:00
parent 76f4f4fe89
commit f47b6324a1
2 changed files with 197 additions and 79 deletions

View File

@ -114,7 +114,8 @@ static int log_augmentation = default_log_augmentation;
static bool fatal_error = false; static bool fatal_error = false;
/** Writer thread structure */ /** Writer thread structure */
struct filewriter_st { struct filewriter_st
{
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t fwr_chk_top; skygw_chk_t fwr_chk_top;
#endif #endif
@ -136,7 +137,8 @@ struct filewriter_st {
* Log client's string is copied to block-sized log buffer, which is passed * Log client's string is copied to block-sized log buffer, which is passed
* to file writer thread. * to file writer thread.
*/ */
typedef struct blockbuf_st { typedef struct blockbuf_st
{
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t bb_chk_top; skygw_chk_t bb_chk_top;
#endif #endif
@ -158,7 +160,8 @@ typedef struct blockbuf_st {
* logfile object corresponds to physical file(s) where * logfile object corresponds to physical file(s) where
* certain log is written. * certain log is written.
*/ */
struct logfile_st { struct logfile_st
{
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t lf_chk_top; skygw_chk_t lf_chk_top;
#endif #endif
@ -193,7 +196,8 @@ struct logfile_st {
}; };
struct fnames_conf_st { struct fnames_conf_st
{
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t fn_chk_top; skygw_chk_t fn_chk_top;
#endif #endif
@ -212,7 +216,8 @@ struct fnames_conf_st {
#endif #endif
}; };
struct logmanager_st { struct logmanager_st
{
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t lm_chk_top; skygw_chk_t lm_chk_top;
#endif #endif
@ -238,7 +243,8 @@ struct logmanager_st {
*/ */
typedef struct strpart_st strpart_t; typedef struct strpart_st strpart_t;
struct strpart_st { struct strpart_st
{
char* sp_string; char* sp_string;
strpart_t* sp_next; strpart_t* sp_next;
}; };
@ -494,7 +500,8 @@ bool skygw_logmanager_init(
acquire_lock(&lmlock); acquire_lock(&lmlock);
if (lm != NULL) { if (lm != NULL)
{
succp = true; succp = true;
goto return_succp; goto return_succp;
} }
@ -521,7 +528,8 @@ static void logmanager_done_nomutex(void)
fwr = &lm->lm_filewriter; fwr = &lm->lm_filewriter;
if (fwr->fwr_state == RUN) { if (fwr->fwr_state == RUN)
{
CHK_FILEWRITER(fwr); CHK_FILEWRITER(fwr);
/** Inform filewriter thread and wait until it has stopped. */ /** Inform filewriter thread and wait until it has stopped. */
skygw_thread_set_exitflag(fwr->fwr_thread, skygw_thread_set_exitflag(fwr->fwr_thread,
@ -535,7 +543,8 @@ static void logmanager_done_nomutex(void)
/** Free filewriter memory. */ /** Free filewriter memory. */
filewriter_done(fwr); filewriter_done(fwr);
for (i=LOGFILE_FIRST; i<=LOGFILE_LAST; i++) { for (i=LOGFILE_FIRST; i<=LOGFILE_LAST; i++)
{
lf = logmanager_get_logfile(lm, (logfile_id_t)i); lf = logmanager_get_logfile(lm, (logfile_id_t)i);
/** Release logfile memory */ /** Release logfile memory */
logfile_done(lf); logfile_done(lf);
@ -574,7 +583,8 @@ void skygw_logmanager_done(void)
{ {
acquire_lock(&lmlock); acquire_lock(&lmlock);
if (lm == NULL) { if (lm == NULL)
{
release_lock(&lmlock); release_lock(&lmlock);
return; return;
} }
@ -585,14 +595,16 @@ void skygw_logmanager_done(void)
/** Wait until all users have left or someone shuts down /** Wait until all users have left or someone shuts down
* logmanager between lock release and acquire. * logmanager between lock release and acquire.
*/ */
while(lm != NULL && lm->lm_nlinks != 0) { while(lm != NULL && lm->lm_nlinks != 0)
{
release_lock(&lmlock); release_lock(&lmlock);
pthread_yield(); pthread_yield();
acquire_lock(&lmlock); acquire_lock(&lmlock);
} }
/** Logmanager was already shut down. Return successfully. */ /** Logmanager was already shut down. Return successfully. */
if (lm == NULL) { if (lm == NULL)
{
goto return_void; goto return_void;
} }
ss_dassert(lm->lm_nlinks == 0); ss_dassert(lm->lm_nlinks == 0);
@ -611,7 +623,8 @@ static logfile_t* logmanager_get_logfile(
ss_dassert(id >= LOGFILE_FIRST && id <= LOGFILE_LAST); ss_dassert(id >= LOGFILE_FIRST && id <= LOGFILE_LAST);
lf = &lmgr->lm_logfile[id]; lf = &lmgr->lm_logfile[id];
if (lf->lf_state == RUN) { if (lf->lf_state == RUN)
{
CHK_LOGFILE(lf); CHK_LOGFILE(lf);
} }
return lf; return lf;
@ -659,7 +672,8 @@ static int logmanager_write_log(
CHK_LOGMANAGER(lm); CHK_LOGMANAGER(lm);
if (id < LOGFILE_FIRST || id > LOGFILE_LAST) { if (id < LOGFILE_FIRST || id > LOGFILE_LAST)
{
const char* errstr = "Invalid logfile id argument."; const char* errstr = "Invalid logfile id argument.";
/** /**
* invalid id, since we don't have logfile yet. * invalid id, since we don't have logfile yet.
@ -672,7 +686,8 @@ static int logmanager_write_log(
strlen(errstr)+1, strlen(errstr)+1,
errstr, errstr,
valist); valist);
if (err != 0) { if (err != 0)
{
fprintf(stderr, fprintf(stderr,
"Writing to logfile %s failed.\n", "Writing to logfile %s failed.\n",
STRLOGID(LOGFILE_ERROR)); STRLOGID(LOGFILE_ERROR));
@ -719,9 +734,13 @@ static int logmanager_write_log(
sesid_str_len = 0; sesid_str_len = 0;
} }
if(highprec) if(highprec)
{
timestamp_len = get_timestamp_len_hp(); timestamp_len = get_timestamp_len_hp();
}
else else
{
timestamp_len = get_timestamp_len(); timestamp_len = get_timestamp_len();
}
cmplen = sesid_str_len > 0 ? sesid_str_len - sizeof(char) : 0; cmplen = sesid_str_len > 0 ? sesid_str_len - sizeof(char) : 0;
/** Find out how much can be safely written with current block size */ /** Find out how much can be safely written with current block size */
@ -776,7 +795,9 @@ static int logmanager_write_log(
} }
if(wp == NULL) if(wp == NULL)
{
return -1; return -1;
}
#if defined (SS_LOG_DEBUG) #if defined (SS_LOG_DEBUG)
{ {
@ -791,9 +812,13 @@ static int logmanager_write_log(
* Returned timestamp_len doesn't include terminating null. * Returned timestamp_len doesn't include terminating null.
*/ */
if(highprec) if(highprec)
{
timestamp_len = snprint_timestamp_hp(wp, timestamp_len); timestamp_len = snprint_timestamp_hp(wp, timestamp_len);
}
else else
{
timestamp_len = snprint_timestamp(wp, timestamp_len); timestamp_len = snprint_timestamp(wp, timestamp_len);
}
if (sesid_str_len != 0) if (sesid_str_len != 0)
{ {
/** /**
@ -809,12 +834,15 @@ static int logmanager_write_log(
* Write next string to overwrite terminating null character * Write next string to overwrite terminating null character
* of the timestamp string. * of the timestamp string.
*/ */
if (use_valist) { if (use_valist)
{
vsnprintf(wp+timestamp_len+sesid_str_len, vsnprintf(wp+timestamp_len+sesid_str_len,
safe_str_len-timestamp_len-sesid_str_len, safe_str_len-timestamp_len-sesid_str_len,
str, str,
valist); valist);
} else { }
else
{
snprintf(wp+timestamp_len+sesid_str_len, snprintf(wp+timestamp_len+sesid_str_len,
safe_str_len-timestamp_len-sesid_str_len, safe_str_len-timestamp_len-sesid_str_len,
"%s", "%s",
@ -824,7 +852,8 @@ static int logmanager_write_log(
/** write to syslog */ /** write to syslog */
if (lf->lf_write_syslog) if (lf->lf_write_syslog)
{ {
switch(id) { switch(id)
{
case LOGFILE_ERROR: case LOGFILE_ERROR:
syslog(LOG_ERR, "%s", wp+timestamp_len); syslog(LOG_ERR, "%s", wp+timestamp_len);
break; break;
@ -856,7 +885,8 @@ static int logmanager_write_log(
* disable because cross-blockbuffer locking either causes deadlock * disable because cross-blockbuffer locking either causes deadlock
* or run out of memory blocks. * or run out of memory blocks.
*/ */
if (spread_down && false) { if (spread_down && false)
{
/** /**
* Write to target log. If spread_down == true, then * Write to target log. If spread_down == true, then
* write also to all logs with greater logfile id. * write also to all logs with greater logfile id.
@ -945,7 +975,8 @@ static void blockbuf_unregister(
/** /**
* if this is the last client in a full buffer, send write request. * if this is the last client in a full buffer, send write request.
*/ */
if (atomic_add(&bb->bb_refcount, -1) == 1 && bb->bb_state == BB_FULL) { if (atomic_add(&bb->bb_refcount, -1) == 1 && bb->bb_state == BB_FULL)
{
skygw_message_send(lf->lf_logmes); skygw_message_send(lf->lf_logmes);
} }
ss_dassert(bb->bb_refcount >= 0); ss_dassert(bb->bb_refcount >= 0);
@ -993,14 +1024,16 @@ static char* blockbuf_get_writepos(
simple_mutex_lock(&bb_list->mlist_mutex, true); simple_mutex_lock(&bb_list->mlist_mutex, true);
CHK_MLIST(bb_list); CHK_MLIST(bb_list);
if (bb_list->mlist_nodecount > 0) { if (bb_list->mlist_nodecount > 0)
{
/** /**
* At least block buffer exists on the list. * At least block buffer exists on the list.
*/ */
node = bb_list->mlist_first; node = bb_list->mlist_first;
/** Loop over blockbuf list to find write position */ /** Loop over blockbuf list to find write position */
while (true) { while (true)
{
CHK_MLIST_NODE(node); CHK_MLIST_NODE(node);
/** Unlock list */ /** Unlock list */
@ -1012,7 +1045,8 @@ static char* blockbuf_get_writepos(
/** Lock buffer */ /** Lock buffer */
simple_mutex_lock(&bb->bb_mutex, true); simple_mutex_lock(&bb->bb_mutex, true);
if (bb->bb_state == BB_FULL || bb->bb_buf_left < str_len) { if (bb->bb_state == BB_FULL || bb->bb_buf_left < str_len)
{
/** /**
* This block buffer is too full. * This block buffer is too full.
* Send flush request to file writer thread. This causes * Send flush request to file writer thread. This causes
@ -1035,7 +1069,8 @@ static char* blockbuf_get_writepos(
* If next node exists move forward. Else check if there is * If next node exists move forward. Else check if there is
* space for a new block buffer on the list. * space for a new block buffer on the list.
*/ */
if (node != bb_list->mlist_last) { if (node != bb_list->mlist_last)
{
node = node->mlnode_next; node = node->mlnode_next;
continue; continue;
} }
@ -1069,7 +1104,9 @@ static char* blockbuf_get_writepos(
*/ */
bb_list->mlist_versno += 1; bb_list->mlist_versno += 1;
ss_dassert(bb_list->mlist_versno%2 == 0); ss_dassert(bb_list->mlist_versno%2 == 0);
} else { }
else
{
/** /**
* List and buffers are full. * List and buffers are full.
* Reset to the beginning of the list, and wait until * Reset to the beginning of the list, and wait until
@ -1082,7 +1119,9 @@ static char* blockbuf_get_writepos(
continue; continue;
} }
}else if(bb->bb_state == BB_CLEARED){ }
else if(bb->bb_state == BB_CLEARED)
{
/** /**
*Move the cleared buffer to the end of the list if it is the first one in the list *Move the cleared buffer to the end of the list if it is the first one in the list
@ -1115,29 +1154,38 @@ static char* blockbuf_get_writepos(
} }
else else
{ {
if(node->mlnode_next){ if(node->mlnode_next)
{
node = node->mlnode_next; node = node->mlnode_next;
}else{ }
else
{
node = bb_list->mlist_first; node = bb_list->mlist_first;
} }
continue; continue;
} }
}else if (bb->bb_state == BB_READY){ }
else if (bb->bb_state == BB_READY)
{
/** /**
* There is space for new log string. * There is space for new log string.
*/ */
break; break;
} }
} /** while (true) */ } /** while (true) */
} else { }
else
{
/** /**
* Create the first block buffer to logfile's blockbuf list. * Create the first block buffer to logfile's blockbuf list.
*/ */
if((bb = blockbuf_init(id)) == NULL) if((bb = blockbuf_init(id)) == NULL)
{
return NULL; return NULL;
}
CHK_BLOCKBUF(bb); CHK_BLOCKBUF(bb);
@ -1259,7 +1307,8 @@ int skygw_log_enable(
} }
CHK_LOGMANAGER(lm); CHK_LOGMANAGER(lm);
if (logfile_set_enabled(id, true)) { if (logfile_set_enabled(id, true))
{
lm->lm_enabled_logfiles |= id; lm->lm_enabled_logfiles |= id;
/** /**
* Set global variable * Set global variable
@ -1323,7 +1372,8 @@ static bool logfile_set_enabled(
CHK_LOGMANAGER(lm); CHK_LOGMANAGER(lm);
if (id < LOGFILE_FIRST || id > LOGFILE_LAST) { if (id < LOGFILE_FIRST || id > LOGFILE_LAST)
{
const char* errstr = "Invalid logfile id argument."; const char* errstr = "Invalid logfile id argument.";
/** /**
* invalid id, since we don't have logfile yet. * invalid id, since we don't have logfile yet.
@ -1336,7 +1386,8 @@ static bool logfile_set_enabled(
strlen(errstr)+1, strlen(errstr)+1,
errstr, errstr,
notused); notused);
if (err != 0) { if (err != 0)
{
fprintf(stderr, fprintf(stderr,
"* Writing to logfile %s failed.\n", "* Writing to logfile %s failed.\n",
STRLOGID(LOGFILE_ERROR)); STRLOGID(LOGFILE_ERROR));
@ -1348,9 +1399,12 @@ static bool logfile_set_enabled(
CHK_LOGFILE(lf); CHK_LOGFILE(lf);
if(use_stdout == 0) if(use_stdout == 0)
{ {
if (val) { if (val)
{
logstr = strdup("---\tLogging to file is enabled\t--"); logstr = strdup("---\tLogging to file is enabled\t--");
} else { }
else
{
logstr = strdup("---\tLogging to file is disabled\t--"); logstr = strdup("---\tLogging to file is disabled\t--");
} }
@ -1366,7 +1420,8 @@ static bool logfile_set_enabled(
notused); notused);
free(logstr); free(logstr);
} }
if (err != 0) { if (err != 0)
{
lf->lf_enabled = oldval; lf->lf_enabled = oldval;
fprintf(stderr, fprintf(stderr,
"logfile_set_enabled failed. Writing notification to logfile %s " "logfile_set_enabled failed. Writing notification to logfile %s "
@ -1517,7 +1572,8 @@ int skygw_log_write_context_flush(
int len = vsnprintf(NULL, 0, str, valist); int len = vsnprintf(NULL, 0, str, valist);
va_end(valist); va_end(valist);
if (len >= 0) { if (len >= 0)
{
char message[len + 1]; char message[len + 1];
va_start(valist, str); va_start(valist, str);
@ -1558,7 +1614,8 @@ int skygw_log_write_context(
int len = vsnprintf(NULL, 0, str, valist); int len = vsnprintf(NULL, 0, str, valist);
va_end(valist); va_end(valist);
if (len >= 0) { if (len >= 0)
{
char message[len + 1]; char message[len + 1];
va_start(valist, str); va_start(valist, str);
@ -1570,7 +1627,8 @@ int skygw_log_write_context(
err = log_write(id, file, line, function, len2, message, flush); err = log_write(id, file, line, function, len2, message, flush);
if (err != 0) { if (err != 0)
{
fprintf(stderr, "skygw_log_write failed.\n"); fprintf(stderr, "skygw_log_write failed.\n");
} }
} }
@ -1585,7 +1643,8 @@ int skygw_log_flush(
int err = 0; int err = 0;
va_list valist; /**< Dummy, must be present but it is not processed */ va_list valist; /**< Dummy, must be present but it is not processed */
if (!logmanager_register(false)) { if (!logmanager_register(false))
{
ss_dfprintf(stderr, ss_dfprintf(stderr,
"Can't register to logmanager, nothing to flush\n"); "Can't register to logmanager, nothing to flush\n");
goto return_err; goto return_err;
@ -1593,7 +1652,8 @@ int skygw_log_flush(
CHK_LOGMANAGER(lm); CHK_LOGMANAGER(lm);
err = logmanager_write_log(id, true, false, false, false, 0, NULL, valist); err = logmanager_write_log(id, true, false, false, false, 0, NULL, valist);
if (err != 0) { if (err != 0)
{
fprintf(stderr, "skygw_log_flush failed.\n"); fprintf(stderr, "skygw_log_flush failed.\n");
goto return_unregister; goto return_unregister;
} }
@ -1678,14 +1738,16 @@ static bool logmanager_register(
acquire_lock(&lmlock); acquire_lock(&lmlock);
if (lm == NULL || !lm->lm_enabled) { if (lm == NULL || !lm->lm_enabled)
{
/** /**
* Flush succeeds if logmanager is shut or shutting down. * Flush succeeds if logmanager is shut or shutting down.
* returning false so that flusher doesn't access logmanager * returning false so that flusher doesn't access logmanager
* and its members which would probabaly lead to NULL pointer * and its members which would probabaly lead to NULL pointer
* reference. * reference.
*/ */
if (!writep || fatal_error) { if (!writep || fatal_error)
{
succp = false; succp = false;
goto return_succp; goto return_succp;
} }
@ -1697,18 +1759,21 @@ static bool logmanager_register(
* logmanager is enabled if someone already restarted * logmanager is enabled if someone already restarted
* it between latest lock release, and acquire. * it between latest lock release, and acquire.
*/ */
while (lm != NULL && !lm->lm_enabled) { while (lm != NULL && !lm->lm_enabled)
{
release_lock(&lmlock); release_lock(&lmlock);
pthread_yield(); pthread_yield();
acquire_lock(&lmlock); acquire_lock(&lmlock);
} }
if (lm == NULL) { if (lm == NULL)
{
succp = logmanager_init_nomutex(0, NULL); succp = logmanager_init_nomutex(0, NULL);
} }
} }
/** if logmanager existed or was succesfully restarted, increase link */ /** if logmanager existed or was succesfully restarted, increase link */
if (succp) { if (succp)
{
lm->lm_nlinks += 1; lm->lm_nlinks += 1;
} }
@ -1800,7 +1865,8 @@ static bool fnames_conf_init(
optind = 1; /**<! reset getopt index */ optind = 1; /**<! reset getopt index */
while ((opt = getopt(argc, argv, "+a:b:c:d:e:f:g:h:i:j:l:m:s:o")) != -1) while ((opt = getopt(argc, argv, "+a:b:c:d:e:f:g:h:i:j:l:m:s:o")) != -1)
{ {
switch (opt) { switch (opt)
{
case 'o': case 'o':
use_stdout = 1; use_stdout = 1;
break; break;
@ -1901,8 +1967,9 @@ static bool fnames_conf_init(
syslog_ident_str); syslog_ident_str);
} }
/* ss_dfprintf(stderr, "\n\n\tCommand line : "); /* ss_dfprintf(stderr, "\n\n\tCommand line : ");
for (i=0; i<argc; i++) { for (i=0; i<argc; i++)
ss_dfprintf(stderr, "%s ", argv[i]); {
ss_dfprintf(stderr, "%s ", argv[i]);
} }
ss_dfprintf(stderr, "\n");*/ ss_dfprintf(stderr, "\n");*/
#if defined(NOT_USED) #if defined(NOT_USED)
@ -1929,7 +1996,8 @@ static bool fnames_conf_init(
CHK_FNAMES_CONF(fn); CHK_FNAMES_CONF(fn);
return_conf_init: return_conf_init:
if (!succp) { if (!succp)
{
fnames_conf_done(fn); fnames_conf_done(fn);
} }
ss_dassert(fn->fn_state == RUN || fn->fn_state == DONE); ss_dassert(fn->fn_state == RUN || fn->fn_state == DONE);
@ -1944,7 +2012,8 @@ static char* fname_conf_get_prefix(
CHK_FNAMES_CONF(fn); CHK_FNAMES_CONF(fn);
ss_dassert(id >= LOGFILE_FIRST && id <= LOGFILE_LAST); ss_dassert(id >= LOGFILE_FIRST && id <= LOGFILE_LAST);
switch (id) { switch (id)
{
case LOGFILE_DEBUG: case LOGFILE_DEBUG:
return strdup(fn->fn_debug_prefix); return strdup(fn->fn_debug_prefix);
break; break;
@ -1973,7 +2042,8 @@ static char* fname_conf_get_suffix(
CHK_FNAMES_CONF(fn); CHK_FNAMES_CONF(fn);
ss_dassert(id >= LOGFILE_FIRST && id <= LOGFILE_LAST); ss_dassert(id >= LOGFILE_FIRST && id <= LOGFILE_LAST);
switch (id) { switch (id)
{
case LOGFILE_DEBUG: case LOGFILE_DEBUG:
return strdup(fn->fn_debug_suffix); return strdup(fn->fn_debug_suffix);
break; break;
@ -2031,7 +2101,8 @@ static bool logfiles_init(
/** /**
* Initialize log files, pass softlink flag if necessary. * Initialize log files, pass softlink flag if necessary.
*/ */
while (lid<=LOGFILE_LAST && succp) { while (lid<=LOGFILE_LAST && succp)
{
/** /**
* Check if the file is stored in shared memory. If so, * Check if the file is stored in shared memory. If so,
* a symbolic link will be created to log directory. * a symbolic link will be created to log directory.
@ -2059,16 +2130,19 @@ static bool logfiles_init(
{ {
write_syslog = false; write_syslog = false;
} }
succp = logfile_init(&lm->lm_logfile[lid], succp = logfile_init(&lm->lm_logfile[lid],
(logfile_id_t)lid, (logfile_id_t)lid,
lm, lm,
store_shmem, store_shmem,
write_syslog); write_syslog);
if (!succp) { if (!succp)
{
fprintf(stderr, "*\n* Error : Initializing log files failed.\n"); fprintf(stderr, "*\n* Error : Initializing log files failed.\n");
break; break;
} }
lid <<= 1; lid <<= 1;
i += 1; i += 1;
} }
@ -2137,7 +2211,8 @@ static bool logfile_create(
store_shmem = lf->lf_store_shmem; store_shmem = lf->lf_store_shmem;
do { do
{
namecreatefail = false; namecreatefail = false;
nameconflicts = false; nameconflicts = false;
@ -2233,7 +2308,8 @@ static bool logfile_create(
lf->lf_full_link_name = NULL; lf->lf_full_link_name = NULL;
} }
} }
} while (namecreatefail || nameconflicts); }
while (namecreatefail || nameconflicts);
succp = true; succp = true;
@ -2318,8 +2394,10 @@ static bool logfile_open_file(
succp = false; succp = false;
goto return_succp; goto return_succp;
} }
free(start_msg_str); free(start_msg_str);
} }
succp = true; succp = true;
return_succp: return_succp:
@ -2387,7 +2465,8 @@ static char* form_full_file_name(
seqno = lf->lf_name_seqno; seqno = lf->lf_name_seqno;
} }
if (parts == NULL || parts->sp_string == NULL) { if (parts == NULL || parts->sp_string == NULL)
{
goto return_filename; goto return_filename;
} }
/** /**
@ -2435,7 +2514,11 @@ static char* form_full_file_name(
} }
return_filename: return_filename:
if (seqnostr != NULL) free(seqnostr); if (seqnostr != NULL)
{
free(seqnostr);
}
return filename; return filename;
} }
@ -2575,7 +2658,8 @@ static bool file_is_symlink(
{ {
rc = lstat(filename, &b); rc = lstat(filename, &b);
if (rc != -1 && S_ISLNK(b.st_mode)) { if (rc != -1 && S_ISLNK(b.st_mode))
{
succp = true; succp = true;
} }
} }
@ -2734,7 +2818,8 @@ return_with_succp:
static void logfile_done( static void logfile_done(
logfile_t* lf) logfile_t* lf)
{ {
switch(lf->lf_state) { switch(lf->lf_state)
{
case RUN: case RUN:
CHK_LOGFILE(lf); CHK_LOGFILE(lf);
ss_dassert(lf->lf_npending_writes == 0); ss_dassert(lf->lf_npending_writes == 0);
@ -2801,7 +2886,8 @@ static bool filewriter_init(
/** Message from clients to filewriter */ /** Message from clients to filewriter */
fw->fwr_clientmes = clientmes; fw->fwr_clientmes = clientmes;
if (fw->fwr_logmes == NULL || fw->fwr_clientmes == NULL) { if (fw->fwr_logmes == NULL || fw->fwr_clientmes == NULL)
{
goto return_succp; goto return_succp;
} }
@ -2824,7 +2910,8 @@ static bool filewriter_init(
succp = true; succp = true;
return_succp: return_succp:
if (!succp) { if (!succp)
{
filewriter_done(fw); filewriter_done(fw);
} }
ss_dassert(fw->fwr_state == RUN || fw->fwr_state == DONE); ss_dassert(fw->fwr_state == RUN || fw->fwr_state == DONE);
@ -2837,7 +2924,8 @@ static void filewriter_done(
int i; int i;
logfile_id_t id; logfile_id_t id;
switch(fw->fwr_state) { switch(fw->fwr_state)
{
case RUN: case RUN:
CHK_FILEWRITER(fw); CHK_FILEWRITER(fw);
case INIT: case INIT:
@ -2932,13 +3020,15 @@ static void* thr_filewriter_fun(
/** Inform log manager about the state. */ /** Inform log manager about the state. */
skygw_message_send(fwr->fwr_clientmes); skygw_message_send(fwr->fwr_clientmes);
while(!skygw_thread_must_exit(thr)) { while(!skygw_thread_must_exit(thr))
{
/** /**
* Wait until new log arrival message appears. * Wait until new log arrival message appears.
* Reset message to avoid redundant calls. * Reset message to avoid redundant calls.
*/ */
skygw_message_wait(fwr->fwr_logmes); skygw_message_wait(fwr->fwr_logmes);
if(skygw_thread_must_exit(thr)){ if(skygw_thread_must_exit(thr))
{
flushall_logfiles(true); flushall_logfiles(true);
} }
@ -2982,9 +3072,13 @@ static void* thr_filewriter_fun(
else if ((succp = logfile_open_file(fwr, lf))) else if ((succp = logfile_open_file(fwr, lf)))
{ {
if(use_stdout) if(use_stdout)
{
skygw_file_free (file); skygw_file_free (file);
}
else else
{
skygw_file_close(file, false); /*< close old file */ skygw_file_close(file, false); /*< close old file */
}
} }
if (!succp) if (!succp)
@ -3079,12 +3173,17 @@ static void* thr_filewriter_fun(
simple_mutex_unlock(&bb->bb_mutex); simple_mutex_unlock(&bb->bb_mutex);
/** Consistent lock-free read on the list */ /** Consistent lock-free read on the list */
do { do
{
while ((vn1 = bb_list->mlist_versno)%2 while ((vn1 = bb_list->mlist_versno)%2
!= 0); != 0)
{
continue;
}
node = node->mlnode_next; node = node->mlnode_next;
vn2 = bb_list->mlist_versno; vn2 = bb_list->mlist_versno;
} while (vn1 != vn2 && node); }
while (vn1 != vn2 && node);
} /* while (node != NULL) */ } /* while (node != NULL) */
@ -3094,7 +3193,8 @@ static void* thr_filewriter_fun(
* flushed. * flushed.
*/ */
if(flushall_started_flag){ if(flushall_started_flag)
{
flushall_started_flag = false; flushall_started_flag = false;
flushall_done_flag = true; flushall_done_flag = true;
i = LOGFILE_FIRST; i = LOGFILE_FIRST;
@ -3109,7 +3209,8 @@ static void* thr_filewriter_fun(
} }
}/* for */ }/* for */
if(flushall_done_flag){ if(flushall_done_flag)
{
flushall_done_flag = false; flushall_done_flag = false;
flushall_logfiles(false); flushall_logfiles(false);
skygw_message_send(fwr->fwr_clientmes); skygw_message_send(fwr->fwr_clientmes);
@ -3127,7 +3228,8 @@ static void* thr_filewriter_fun(
static void fnames_conf_done( static void fnames_conf_done(
fnames_conf_t* fn) fnames_conf_t* fn)
{ {
switch (fn->fn_state) { switch (fn->fn_state)
{
case RUN: case RUN:
CHK_FNAMES_CONF(fn); CHK_FNAMES_CONF(fn);
case INIT: case INIT:
@ -3221,7 +3323,8 @@ bool thr_flushall_check()
bool rval = false; bool rval = false;
simple_mutex_lock(&lm->lm_mutex,true); simple_mutex_lock(&lm->lm_mutex,true);
rval = flushall_flag; rval = flushall_flag;
if(rval && !flushall_started_flag && !flushall_done_flag){ if(rval && !flushall_started_flag && !flushall_done_flag)
{
flushall_started_flag = true; flushall_started_flag = true;
} }
simple_mutex_unlock(&lm->lm_mutex); simple_mutex_unlock(&lm->lm_mutex);
@ -3240,7 +3343,10 @@ void flushall_logfiles(bool flush)
*/ */
void skygw_log_sync_all(void) void skygw_log_sync_all(void)
{ {
if(!use_stdout)skygw_log_write(LOGFILE_TRACE,"Starting log flushing to disk."); if(!use_stdout)
{
skygw_log_write(LOGFILE_TRACE,"Starting log flushing to disk.");
}
/** If initialization of the log manager has not been done, lm pointer can be /** If initialization of the log manager has not been done, lm pointer can be
* NULL. */ * NULL. */

View File

@ -30,13 +30,15 @@ typedef struct logfile_st logfile_t;
typedef struct fnames_conf_st fnames_conf_t; typedef struct fnames_conf_st fnames_conf_t;
typedef struct logmanager_st logmanager_t; typedef struct logmanager_st logmanager_t;
typedef enum { typedef enum
{
BB_READY = 0x00, BB_READY = 0x00,
BB_FULL, BB_FULL,
BB_CLEARED BB_CLEARED
} blockbuf_state_t; } blockbuf_state_t;
typedef enum { typedef enum
{
LOGFILE_ERROR = 1, LOGFILE_ERROR = 1,
LOGFILE_FIRST = LOGFILE_ERROR, LOGFILE_FIRST = LOGFILE_ERROR,
LOGFILE_MESSAGE = 2, LOGFILE_MESSAGE = 2,
@ -46,13 +48,17 @@ typedef enum {
} logfile_id_t; } logfile_id_t;
typedef enum { FILEWRITER_INIT, FILEWRITER_RUN, FILEWRITER_DONE } typedef enum
filewriter_state_t; {
FILEWRITER_INIT,
FILEWRITER_RUN,
FILEWRITER_DONE
} filewriter_state_t;
/** /**
* Thread-specific logging information. * Thread-specific logging information.
*/ */
typedef struct log_info_st typedef struct log_info
{ {
size_t li_sesid; size_t li_sesid;
int li_enabled_logs; int li_enabled_logs;
@ -106,7 +112,13 @@ typedef struct log_info_st
* RUN Struct is valid for run-time checking. * RUN Struct is valid for run-time checking.
* DONE means that possible memory allocations have been released. * DONE means that possible memory allocations have been released.
*/ */
typedef enum { UNINIT = 0, INIT, RUN, DONE } flat_obj_state_t; typedef enum
{
UNINIT = 0,
INIT,
RUN,
DONE
} flat_obj_state_t;
/** /**
* LOG_AUGMENT_WITH_FUNCTION Each logged line is suffixed with [function-name]. * LOG_AUGMENT_WITH_FUNCTION Each logged line is suffixed with [function-name].