pacemaker  1.1.24-3850484742
Scalable High-Availability cluster resource manager
mainloop.h
Go to the documentation of this file.
1 /*
2  * Copyright 2009-2018 Andrew Beekhof <andrew@beekhof.net>
3  *
4  * This source code is licensed under the GNU Lesser General Public License
5  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
6  */
7 
8 #ifndef CRM_COMMON_MAINLOOP__H
9 # define CRM_COMMON_MAINLOOP__H
10 
17 # include <glib.h>
18 
20  /* don't kill pid group on timeout, only kill the pid */
22 };
23 
24 typedef struct trigger_s crm_trigger_t;
25 typedef struct mainloop_io_s mainloop_io_t;
26 typedef struct mainloop_child_s mainloop_child_t;
27 typedef struct mainloop_timer_s mainloop_timer_t;
28 
29 void mainloop_cleanup(void);
30 
31 crm_trigger_t *mainloop_add_trigger(int priority, int (*dispatch) (gpointer user_data),
32  gpointer userdata);
33 
34 void mainloop_set_trigger(crm_trigger_t * source);
35 
37 
38 gboolean mainloop_destroy_trigger(crm_trigger_t * source);
39 
40 gboolean crm_signal(int sig, void (*dispatch) (int sig));
41 
42 gboolean mainloop_add_signal(int sig, void (*dispatch) (int sig));
43 
44 gboolean mainloop_destroy_signal(int sig);
45 
47 
49 
51 
52 guint mainloop_timer_set_period(mainloop_timer_t *t, guint period_ms);
53 
54 mainloop_timer_t *mainloop_timer_add(const char *name, guint period_ms, bool repeat, GSourceFunc cb, void *userdata);
55 
57 
58 
59 # include <crm/common/ipc.h>
60 # include <qb/qbipcs.h>
61 
63  int (*dispatch) (const char *buffer, ssize_t length, gpointer userdata);
64  void (*destroy) (gpointer);
65 };
66 
67 qb_ipcs_service_t *mainloop_add_ipc_server(const char *name, enum qb_ipc_type type,
68  struct qb_ipcs_service_handlers *callbacks);
69 
89 qb_ipcs_service_t *mainloop_add_ipc_server_with_prio(const char *name,
90  enum qb_ipc_type type,
91  struct qb_ipcs_service_handlers *callbacks,
92  enum qb_loop_priority prio);
93 
94 void mainloop_del_ipc_server(qb_ipcs_service_t * server);
95 
96 mainloop_io_t *mainloop_add_ipc_client(const char *name, int priority, size_t max_size,
97  void *userdata, struct ipc_client_callbacks *callbacks);
98 
100 
102 
104  int (*dispatch) (gpointer userdata);
105  void (*destroy) (gpointer userdata);
106 };
107 
108 mainloop_io_t *mainloop_add_fd(const char *name, int priority, int fd, void *userdata,
109  struct mainloop_fd_callbacks *callbacks);
110 
111 void mainloop_del_fd(mainloop_io_t * client);
112 
113 /*
114  * Create a new tracked process
115  * To track a process group, use -pid
116  */
117 void mainloop_child_add(pid_t pid,
118  int timeout,
119  const char *desc,
120  void *userdata,
121  void (*callback) (mainloop_child_t * p, pid_t pid, int core, int signo, int exitcode));
122 
123 void mainloop_child_add_with_flags(pid_t pid,
124  int timeout,
125  const char *desc,
126  void *userdata,
128  void (*callback) (mainloop_child_t * p, pid_t pid, int core, int signo, int exitcode));
129 
132 const char *mainloop_child_name(mainloop_child_t * child);
133 
134 pid_t mainloop_child_pid(mainloop_child_t * child);
136 gboolean mainloop_child_kill(pid_t pid);
137 
138 void pcmk_drain_main_loop(GMainLoop *mloop, guint timer_ms,
139  bool (*check)(guint));
140 
141 # define G_PRIORITY_MEDIUM (G_PRIORITY_HIGH/2)
142 
143 #endif
void(* destroy)(gpointer)
Definition: mainloop.h:64
gboolean mainloop_add_signal(int sig, void(*dispatch)(int sig))
Definition: mainloop.c:327
mainloop_io_t * mainloop_add_fd(const char *name, int priority, int fd, void *userdata, struct mainloop_fd_callbacks *callbacks)
Definition: mainloop.c:886
void mainloop_timer_start(mainloop_timer_t *t)
Definition: mainloop.c:1262
guint mainloop_timer_set_period(mainloop_timer_t *t, guint period_ms)
Definition: mainloop.c:1280
mainloop_child_flags
Definition: mainloop.h:19
void mainloop_timer_del(mainloop_timer_t *t)
Definition: mainloop.c:1318
gboolean mainloop_child_kill(pid_t pid)
Definition: mainloop.c:1118
qb_ipcs_service_t * mainloop_add_ipc_server_with_prio(const char *name, enum qb_ipc_type type, struct qb_ipcs_service_handlers *callbacks, enum qb_loop_priority prio)
Start server-side API end-point, hooked into the internal event loop.
Definition: mainloop.c:655
void pcmk_drain_main_loop(GMainLoop *mloop, guint timer_ms, bool(*check)(guint))
Process main loop events while a certain condition is met.
Definition: mainloop.c:1354
struct mainloop_timer_s mainloop_timer_t
Definition: mainloop.h:27
struct mainloop_io_s mainloop_io_t
Definition: mainloop.h:25
void mainloop_child_add_with_flags(pid_t pid, int timeout, const char *desc, void *userdata, enum mainloop_child_flags, void(*callback)(mainloop_child_t *p, pid_t pid, int core, int signo, int exitcode))
Definition: mainloop.c:1173
struct mainloop_child_s mainloop_child_t
Definition: mainloop.h:26
void mainloop_set_trigger(crm_trigger_t *source)
Definition: mainloop.c:225
void mainloop_cleanup(void)
Definition: mainloop.c:411
pid_t mainloop_child_pid(mainloop_child_t *child)
Definition: mainloop.c:946
uint32_t pid
Definition: internal.h:77
gboolean mainloop_destroy_trigger(crm_trigger_t *source)
Definition: mainloop.c:233
void mainloop_timer_stop(mainloop_timer_t *t)
Definition: mainloop.c:1271
struct trigger_s crm_trigger_t
Definition: mainloop.h:24
void * mainloop_child_userdata(mainloop_child_t *child)
Definition: mainloop.c:964
struct crm_ipc_s crm_ipc_t
Definition: ipc.h:52
gboolean crm_signal(int sig, void(*dispatch)(int sig))
Definition: mainloop.c:302
crm_trigger_t * mainloop_add_trigger(int priority, int(*dispatch)(gpointer user_data), gpointer userdata)
Definition: mainloop.c:213
void mainloop_del_ipc_client(mainloop_io_t *client)
Definition: mainloop.c:871
bool mainloop_timer_running(mainloop_timer_t *t)
Definition: mainloop.c:1254
void mainloop_child_add(pid_t pid, int timeout, const char *desc, void *userdata, void(*callback)(mainloop_child_t *p, pid_t pid, int core, int signo, int exitcode))
Definition: mainloop.c:1207
void mainloop_trigger_complete(crm_trigger_t *trig)
Definition: mainloop.c:201
crm_ipc_t * mainloop_get_ipc_client(mainloop_io_t *client)
Definition: mainloop.c:877
void mainloop_clear_child_userdata(mainloop_child_t *child)
Definition: mainloop.c:970
Wrappers for and extensions to libqb IPC.
void mainloop_del_fd(mainloop_io_t *client)
Definition: mainloop.c:930
void mainloop_del_ipc_server(qb_ipcs_service_t *server)
Definition: mainloop.c:695
mainloop_timer_t * mainloop_timer_add(const char *name, guint period_ms, bool repeat, GSourceFunc cb, void *userdata)
Definition: mainloop.c:1297
gboolean mainloop_destroy_signal(int sig)
Definition: mainloop.c:385
mainloop_io_t * mainloop_add_ipc_client(const char *name, int priority, size_t max_size, void *userdata, struct ipc_client_callbacks *callbacks)
Definition: mainloop.c:843
qb_ipcs_service_t * mainloop_add_ipc_server(const char *name, enum qb_ipc_type type, struct qb_ipcs_service_handlers *callbacks)
Definition: mainloop.c:648
const char * mainloop_child_name(mainloop_child_t *child)
Definition: mainloop.c:952
int(* dispatch)(const char *buffer, ssize_t length, gpointer userdata)
Definition: mainloop.h:63
enum crm_ais_msg_types type
Definition: internal.h:79
int mainloop_child_timeout(mainloop_child_t *child)
Definition: mainloop.c:958