syslog-ng source
mainloop.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2013 Balabit
3  * Copyright (c) 1998-2013 Balázs Scheidler
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * As an additional exemption you are allowed to compile & link against the
20  * OpenSSL libraries as published by the OpenSSL project. See the file
21  * COPYING for details.
22  *
23  */
24 #ifndef MAINLOOP_H_INCLUDED
25 #define MAINLOOP_H_INCLUDED
26 
27 #include "syslog-ng.h"
28 #include "thread-utils.h"
29 
30 extern volatile gint main_loop_workers_running;
31 
32 typedef struct _MainLoop MainLoop;
33 
34 typedef struct _MainLoopOptions
35 {
37  gboolean syntax_only;
38  gboolean check_startup;
39  gboolean config_id;
40  gboolean interactive_mode;
41  gboolean server_mode;
44 
46 extern GCond thread_halt_cond;
47 extern GMutex workers_running_lock;
48 
49 typedef gpointer (*MainLoopTaskFunc)(gpointer user_data);
50 
51 static inline void
52 main_loop_assert_main_thread(void)
53 {
54 #if SYSLOG_NG_ENABLE_DEBUG
55  g_assert(threads_equal(main_thread_handle, get_thread_id()));
56 #endif
57 }
58 
59 static inline gboolean
60 main_loop_is_main_thread(void)
61 {
62  return threads_equal(main_thread_handle, get_thread_id());
63 }
64 
65 gboolean main_loop_reload_config_prepare(MainLoop *self, GError **error);
66 void main_loop_reload_config_commence(MainLoop *self);
67 void main_loop_reload_config(MainLoop *self);
68 void main_loop_verify_config(GString *result, MainLoop *self);
69 gboolean main_loop_is_terminating(MainLoop *self);
70 void main_loop_exit(MainLoop *self);
71 
72 int main_loop_read_and_init_config(MainLoop *self);
73 gboolean main_loop_was_last_reload_successful(MainLoop *self);
74 void main_loop_run(MainLoop *self);
75 
76 MainLoop *main_loop_get_instance(void);
77 GlobalConfig *main_loop_get_current_config(MainLoop *self);
78 GlobalConfig *main_loop_get_pending_new_config(MainLoop *self);
79 void main_loop_init(MainLoop *self, MainLoopOptions *options);
80 void main_loop_deinit(MainLoop *self);
81 
82 void main_loop_add_options(GOptionContext *ctx);
83 gboolean main_loop_is_server_mode(MainLoop *self);
84 void main_loop_set_server_mode(MainLoop *self, gboolean server_mode);
85 
86 gboolean main_loop_initialize_state(GlobalConfig *cfg, const gchar *persist_filename);
87 
90 
91 gboolean main_loop_is_control_server_running(MainLoop *self);
92 
93 #define MAIN_LOOP_ERROR main_loop_error_quark()
94 
95 GQuark main_loop_error_quark(void);
96 
98 {
101 };
102 
103 #endif
volatile gint main_loop_workers_running
Definition: mainloop.c:60
gboolean main_loop_was_last_reload_successful(MainLoop *self)
Definition: mainloop.c:233
gboolean main_loop_reload_config_prepare(MainLoop *self, GError **error)
Definition: mainloop.c:323
gpointer(* MainLoopTaskFunc)(gpointer user_data)
Definition: mainloop.h:49
gboolean main_loop_is_control_server_running(MainLoop *self)
Definition: mainloop.c:798
GCond thread_halt_cond
Definition: mainloop.c:103
gboolean main_loop_is_server_mode(MainLoop *self)
Definition: mainloop.c:196
void main_loop_thread_resource_deinit(void)
Definition: mainloop.c:792
void main_loop_init(MainLoop *self, MainLoopOptions *options)
Definition: mainloop.c:651
int main_loop_read_and_init_config(MainLoop *self)
Definition: mainloop.c:685
GMutex workers_running_lock
Definition: mainloop.c:104
void main_loop_set_server_mode(MainLoop *self, gboolean server_mode)
Definition: mainloop.c:190
MainLoopError
Definition: mainloop.h:98
@ MAIN_LOOP_ERROR_RELOAD_FAILED
Definition: mainloop.h:100
@ MAIN_LOOP_ERROR_FAILED
Definition: mainloop.h:99
GQuark main_loop_error_quark(void)
Definition: mainloop.c:804
void main_loop_reload_config_commence(MainLoop *self)
Definition: mainloop.c:363
void main_loop_exit(MainLoop *self)
Definition: mainloop.c:599
GlobalConfig * main_loop_get_pending_new_config(MainLoop *self)
Definition: mainloop.c:411
void main_loop_thread_resource_init(void)
Definition: mainloop.c:785
void main_loop_add_options(GOptionContext *ctx)
Definition: mainloop.c:779
MainLoop * main_loop_get_instance(void)
Definition: mainloop.c:184
void main_loop_run(MainLoop *self)
Definition: mainloop.c:760
ThreadId main_thread_handle
Definition: mainloop.c:102
void main_loop_reload_config(MainLoop *self)
Definition: mainloop.c:370
void main_loop_deinit(MainLoop *self)
Definition: mainloop.c:736
gboolean main_loop_is_terminating(MainLoop *self)
Definition: mainloop.c:227
gboolean main_loop_initialize_state(GlobalConfig *cfg, const gchar *persist_filename)
Definition: mainloop.c:203
GlobalConfig * main_loop_get_current_config(MainLoop *self)
Definition: mainloop.c:405
void main_loop_verify_config(GString *result, MainLoop *self)
Definition: mainloop.c:420
Definition: mainloop.h:35
gchar * preprocess_into
Definition: mainloop.h:36
gboolean syntax_only
Definition: mainloop.h:37
gboolean disable_module_discovery
Definition: mainloop.h:42
gboolean config_id
Definition: mainloop.h:39
gboolean server_mode
Definition: mainloop.h:41
gboolean interactive_mode
Definition: mainloop.h:40
gboolean check_startup
Definition: mainloop.h:38
Definition: mainloop.c:107
GlobalConfig * cfg
Definition: test_batched_ack_tracker.c:34
GString * result
Definition: test_lexer_block.c:34
pthread_t ThreadId
Definition: thread-utils.h:31