pacemaker  2.0.1-9e909a5bdd
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 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
21 # include <glib.h>
22 
24  /* don't kill pid group on timeout, only kill the pid */
26 };
27 
28 typedef struct trigger_s crm_trigger_t;
29 typedef struct mainloop_io_s mainloop_io_t;
30 typedef struct mainloop_child_s mainloop_child_t;
31 typedef struct mainloop_timer_s mainloop_timer_t;
32 
33 void mainloop_cleanup(void);
34 
35 crm_trigger_t *mainloop_add_trigger(int priority, int (*dispatch) (gpointer user_data),
36  gpointer userdata);
37 
38 void mainloop_set_trigger(crm_trigger_t * source);
39 
41 
42 gboolean mainloop_destroy_trigger(crm_trigger_t * source);
43 
44 gboolean crm_signal(int sig, void (*dispatch) (int sig));
45 
46 gboolean mainloop_add_signal(int sig, void (*dispatch) (int sig));
47 
48 gboolean mainloop_destroy_signal(int sig);
49 
51 
53 
55 
56 guint mainloop_timer_set_period(mainloop_timer_t *t, guint period_ms);
57 
58 mainloop_timer_t *mainloop_timer_add(const char *name, guint period_ms, bool repeat, GSourceFunc cb, void *userdata);
59 
61 
62 
63 # include <crm/common/ipc.h>
64 # include <qb/qbipcs.h>
65 
67  int (*dispatch) (const char *buffer, ssize_t length, gpointer userdata);
68  void (*destroy) (gpointer);
69 };
70 
71 qb_ipcs_service_t *mainloop_add_ipc_server(const char *name, enum qb_ipc_type type,
72  struct qb_ipcs_service_handlers *callbacks);
73 
74 void mainloop_del_ipc_server(qb_ipcs_service_t * server);
75 
76 mainloop_io_t *mainloop_add_ipc_client(const char *name, int priority, size_t max_size,
77  void *userdata, struct ipc_client_callbacks *callbacks);
78 
80 
82 
84  int (*dispatch) (gpointer userdata);
85  void (*destroy) (gpointer userdata);
86 };
87 
88 mainloop_io_t *mainloop_add_fd(const char *name, int priority, int fd, void *userdata,
89  struct mainloop_fd_callbacks *callbacks);
90 
91 void mainloop_del_fd(mainloop_io_t * client);
92 
93 /*
94  * Create a new tracked process
95  * To track a process group, use -pid
96  */
97 void mainloop_child_add(pid_t pid,
98  int timeout,
99  const char *desc,
100  void *userdata,
101  void (*callback) (mainloop_child_t * p, pid_t pid, int core, int signo, int exitcode));
102 
103 void mainloop_child_add_with_flags(pid_t pid,
104  int timeout,
105  const char *desc,
106  void *userdata,
108  void (*callback) (mainloop_child_t * p, pid_t pid, int core, int signo, int exitcode));
109 
112 const char *mainloop_child_name(mainloop_child_t * child);
113 
114 pid_t mainloop_child_pid(mainloop_child_t * child);
116 gboolean mainloop_child_kill(pid_t pid);
117 
118 void pcmk_drain_main_loop(GMainLoop *mloop, guint timer_ms,
119  bool (*check)(guint));
120 
121 # define G_PRIORITY_MEDIUM (G_PRIORITY_HIGH/2)
122 
123 #ifdef __cplusplus
124 }
125 #endif
126 
127 #endif
void(* destroy)(gpointer)
Definition: mainloop.h:68
gboolean mainloop_add_signal(int sig, void(*dispatch)(int sig))
Definition: mainloop.c:326
mainloop_io_t * mainloop_add_fd(const char *name, int priority, int fd, void *userdata, struct mainloop_fd_callbacks *callbacks)
Definition: mainloop.c:804
void mainloop_timer_start(mainloop_timer_t *t)
Definition: mainloop.c:1178
guint mainloop_timer_set_period(mainloop_timer_t *t, guint period_ms)
Definition: mainloop.c:1196
mainloop_child_flags
Definition: mainloop.h:23
void mainloop_timer_del(mainloop_timer_t *t)
Definition: mainloop.c:1234
gboolean mainloop_child_kill(pid_t pid)
Definition: mainloop.c:1036
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:1270
struct mainloop_timer_s mainloop_timer_t
Definition: mainloop.h:31
struct mainloop_io_s mainloop_io_t
Definition: mainloop.h:29
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:1091
struct mainloop_child_s mainloop_child_t
Definition: mainloop.h:30
void mainloop_set_trigger(crm_trigger_t *source)
Definition: mainloop.c:213
void mainloop_cleanup(void)
Definition: mainloop.c:400
pid_t mainloop_child_pid(mainloop_child_t *child)
Definition: mainloop.c:864
uint32_t pid
Definition: internal.h:81
gboolean mainloop_destroy_trigger(crm_trigger_t *source)
Definition: mainloop.c:221
void mainloop_timer_stop(mainloop_timer_t *t)
Definition: mainloop.c:1187
struct trigger_s crm_trigger_t
Definition: mainloop.h:28
void * mainloop_child_userdata(mainloop_child_t *child)
Definition: mainloop.c:882
struct crm_ipc_s crm_ipc_t
Definition: ipc.h:56
gboolean crm_signal(int sig, void(*dispatch)(int sig))
Definition: mainloop.c:290
crm_trigger_t * mainloop_add_trigger(int priority, int(*dispatch)(gpointer user_data), gpointer userdata)
Definition: mainloop.c:201
void mainloop_del_ipc_client(mainloop_io_t *client)
Definition: mainloop.c:789
bool mainloop_timer_running(mainloop_timer_t *t)
Definition: mainloop.c:1170
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:1125
void mainloop_trigger_complete(crm_trigger_t *trig)
Definition: mainloop.c:189
crm_ipc_t * mainloop_get_ipc_client(mainloop_io_t *client)
Definition: mainloop.c:795
void mainloop_clear_child_userdata(mainloop_child_t *child)
Definition: mainloop.c:888
Wrappers for and extensions to libqb IPC.
void mainloop_del_fd(mainloop_io_t *client)
Definition: mainloop.c:848
void mainloop_del_ipc_server(qb_ipcs_service_t *server)
Definition: mainloop.c:612
mainloop_timer_t * mainloop_timer_add(const char *name, guint period_ms, bool repeat, GSourceFunc cb, void *userdata)
Definition: mainloop.c:1213
gboolean mainloop_destroy_signal(int sig)
Definition: mainloop.c:380
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:761
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:582
const char * mainloop_child_name(mainloop_child_t *child)
Definition: mainloop.c:870
int(* dispatch)(const char *buffer, ssize_t length, gpointer userdata)
Definition: mainloop.h:67
enum crm_ais_msg_types type
Definition: internal.h:83
int mainloop_child_timeout(mainloop_child_t *child)
Definition: mainloop.c:876