if (p->raw_headers) {
g_hash_table_unref (p->raw_headers);
}
+ if (p->children) {
+ g_ptr_array_free (p->children, TRUE);
+ }
}
for (i = 0; i < task->text_parts->len; i ++) {
if (rspamd_log->enabled) {
if (!rspamd_log->no_lock) {
#ifndef DISABLE_PTHREAD_MUTEX
- rspamd_mempool_lock_mutex (rspamd_log->mtx);
+ if (rspamd_log->mtx) {
+ rspamd_mempool_lock_mutex (rspamd_log->mtx);
+ }
+ else {
+ rspamd_file_lock (rspamd_log->fd, FALSE);
+ }
#else
rspamd_file_lock (rspamd_log->fd, FALSE);
#endif
if (!rspamd_log->no_lock) {
#ifndef DISABLE_PTHREAD_MUTEX
- rspamd_mempool_unlock_mutex (rspamd_log->mtx);
+ if (rspamd_log->mtx) {
+ rspamd_mempool_unlock_mutex (rspamd_log->mtx);
+ }
+ else {
+ rspamd_file_unlock (rspamd_log->fd, FALSE);
+ }
#else
rspamd_file_unlock (rspamd_log->fd, FALSE);
#endif
void
rspamd_set_logger (struct rspamd_config *cfg,
GQuark ptype,
- struct rspamd_main *rspamd)
+ rspamd_logger_t **plogger,
+ rspamd_mempool_t *pool)
{
rspamd_logger_t *logger;
- if (rspamd->logger == NULL) {
- rspamd->logger = g_slice_alloc0 (sizeof (rspamd_logger_t));
- logger = rspamd->logger;
+ if (plogger == NULL || *plogger == NULL) {
+ logger = g_slice_alloc0 (sizeof (rspamd_logger_t));
- if (cfg->log_error_elts > 0) {
- logger->errlog = rspamd_mempool_alloc0_shared (rspamd->server_pool,
+ if (cfg->log_error_elts > 0 && pool) {
+ logger->errlog = rspamd_mempool_alloc0_shared (pool,
sizeof (*logger->errlog));
- logger->errlog->pool = rspamd->server_pool;
+ logger->errlog->pool = pool;
logger->errlog->max_elts = cfg->log_error_elts;
logger->errlog->elt_len = cfg->log_error_elt_maxlen;
- logger->errlog->elts = rspamd_mempool_alloc0_shared (rspamd->server_pool,
+ logger->errlog->elts = rspamd_mempool_alloc0_shared (pool,
sizeof (struct rspamd_logger_error_elt) * cfg->log_error_elts +
cfg->log_error_elt_maxlen * cfg->log_error_elts);
- logger->mtx = rspamd_mempool_get_mutex (rspamd->server_pool);
+ }
+
+ if (pool) {
+ logger->mtx = rspamd_mempool_get_mutex (pool);
+ }
+
+ if (plogger) {
+ *plogger = logger;
}
}
else {
- logger = rspamd->logger;
+ logger = *plogger;
}
logger->type = cfg->log_type;
*/
void rspamd_set_logger (struct rspamd_config *cfg,
GQuark ptype,
- struct rspamd_main *main);
+ rspamd_logger_t **plogger,
+ rspamd_mempool_t *pool);
/**
* Open log file or initialize other structures
rm->cfg->log_type = RSPAMD_LOG_CONSOLE;
rm->cfg->log_level = G_LOG_LEVEL_CRITICAL;
- rspamd_set_logger (rm->cfg, g_quark_try_string ("main"), rm);
+ rspamd_set_logger (rm->cfg, g_quark_try_string ("main"), &rm->logger,
+ rm->server_pool);
if (rspamd_log_open_priv (rm->logger, rm->workers_uid, rm->workers_gid) ==
-1) {
fprintf (stderr, "Fatal error, cannot open logfile, exiting\n");
rm->cfg->log_level = G_LOG_LEVEL_WARNING;
}
- rspamd_set_logger (rm->cfg, configtest_quark, rm);
+ rspamd_set_logger (rm->cfg, configtest_quark, &rm->logger,
+ rm->server_pool);
if (rspamd_log_open_priv (rm->logger, rm->workers_uid, rm->workers_gid) ==
-1) {
fprintf (stderr, "Fatal error, cannot open logfile, exiting\n");
cfg->log_level = G_LOG_LEVEL_WARNING;
cfg->log_type = RSPAMD_LOG_CONSOLE;
- rspamd_set_logger (cfg, process_quark, rspamd_main);
+ rspamd_set_logger (cfg, process_quark, &rspamd_main->logger,
+ rspamd_main->server_pool);
(void) rspamd_log_open (rspamd_main->logger);
g_log_set_default_handler (rspamd_glib_log_function, rspamd_main->logger);
g_set_printerr_handler (rspamd_glib_printerr_function);
}
rspamd_set_logger (rspamd_main->cfg, g_quark_try_string ("main"),
- rspamd_main);
+ &rspamd_main->logger, rspamd_main->server_pool);
if (rspamd_log_open_priv (rspamd_main->logger,
rspamd_main->workers_uid, rspamd_main->workers_gid) == -1) {
fprintf (stderr, "Fatal error, cannot open logfile, exiting\n");
tmp_cfg->c_modules = g_hash_table_ref (rspamd_main->cfg->c_modules);
tmp_cfg->libs_ctx = rspamd_main->cfg->libs_ctx;
REF_RETAIN (tmp_cfg->libs_ctx);
- rspamd_set_logger (tmp_cfg, g_quark_try_string ("main"), rspamd_main);
+ rspamd_set_logger (tmp_cfg, g_quark_try_string ("main"),
+ &rspamd_main->logger, rspamd_main->server_pool);
cfg_file = rspamd_mempool_strdup (tmp_cfg->cfg_pool,
rspamd_main->cfg->cfg_name);
/* Save some variables */
if (!load_rspamd_config (rspamd_main, tmp_cfg, TRUE,
RSPAMD_CONFIG_INIT_VALIDATE|RSPAMD_CONFIG_INIT_SYMCACHE)) {
- rspamd_set_logger (rspamd_main->cfg, g_quark_try_string (
- "main"), rspamd_main);
+ rspamd_set_logger (rspamd_main->cfg, g_quark_try_string ("main"),
+ &rspamd_main->logger, rspamd_main->server_pool);
msg_err_main ("cannot parse new config file, revert to old one");
REF_RELEASE (tmp_cfg);
}
REF_RELEASE (rspamd_main->cfg);
rspamd_main->cfg = tmp_cfg;
- rspamd_set_logger (tmp_cfg, g_quark_try_string ("main"), rspamd_main);
+ rspamd_set_logger (tmp_cfg, g_quark_try_string ("main"),
+ &rspamd_main->logger, rspamd_main->server_pool);
/* Force debug log */
if (is_debug) {
rspamd_main->cfg->log_level = G_LOG_LEVEL_DEBUG;
/* First set logger to console logger */
rspamd_main->cfg->log_type = RSPAMD_LOG_CONSOLE;
- rspamd_set_logger (rspamd_main->cfg, type, rspamd_main);
+ rspamd_set_logger (rspamd_main->cfg, type,
+ &rspamd_main->logger, rspamd_main->server_pool);
(void) rspamd_log_open (rspamd_main->logger);
g_log_set_default_handler (rspamd_glib_log_function, rspamd_main->logger);
g_set_printerr_handler (rspamd_glib_printerr_function);