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 
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
mainloop_child_kill
gboolean mainloop_child_kill(pid_t pid)
Definition: mainloop.c:1036
mainloop_add_fd
mainloop_io_t * mainloop_add_fd(const char *name, int priority, int fd, void *userdata, struct mainloop_fd_callbacks *callbacks)
Definition: mainloop.c:804
mainloop_get_ipc_client
crm_ipc_t * mainloop_get_ipc_client(mainloop_io_t *client)
Definition: mainloop.c:795
mainloop_child_userdata
void * mainloop_child_userdata(mainloop_child_t *child)
Definition: mainloop.c:882
ipc_client_callbacks::destroy
void(* destroy)(gpointer)
Definition: mainloop.h:68
mainloop_fd_callbacks
Definition: mainloop.h:83
mainloop_timer_start
void mainloop_timer_start(mainloop_timer_t *t)
Definition: mainloop.c:1178
mainloop_child_pid
pid_t mainloop_child_pid(mainloop_child_t *child)
Definition: mainloop.c:864
type
enum crm_ais_msg_types type
Definition: internal.h:83
mainloop_timer_t
struct mainloop_timer_s mainloop_timer_t
Definition: mainloop.h:31
mainloop_child_timeout
int mainloop_child_timeout(mainloop_child_t *child)
Definition: mainloop.c:876
mainloop_del_ipc_server
void mainloop_del_ipc_server(qb_ipcs_service_t *server)
Definition: mainloop.c:612
mainloop_timer_del
void mainloop_timer_del(mainloop_timer_t *t)
Definition: mainloop.c:1234
pcmk_drain_main_loop
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
mainloop_add_ipc_server
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
mainloop_add_trigger
crm_trigger_t * mainloop_add_trigger(int priority, int(*dispatch)(gpointer user_data), gpointer userdata)
Definition: mainloop.c:201
mainloop_fd_callbacks::destroy
void(* destroy)(gpointer userdata)
Definition: mainloop.h:85
mainloop_child_name
const char * mainloop_child_name(mainloop_child_t *child)
Definition: mainloop.c:870
mainloop_destroy_signal
gboolean mainloop_destroy_signal(int sig)
Definition: mainloop.c:380
mainloop_timer_stop
void mainloop_timer_stop(mainloop_timer_t *t)
Definition: mainloop.c:1187
mainloop_add_signal
gboolean mainloop_add_signal(int sig, void(*dispatch)(int sig))
Definition: mainloop.c:326
mainloop_destroy_trigger
gboolean mainloop_destroy_trigger(crm_trigger_t *source)
Definition: mainloop.c:221
crm_trigger_t
struct trigger_s crm_trigger_t
Definition: mainloop.h:28
mainloop_child_flags
mainloop_child_flags
Definition: mainloop.h:23
pid
uint32_t pid
Definition: internal.h:81
ipc_client_callbacks
Definition: mainloop.h:66
mainloop_leave_pid_group
Definition: mainloop.h:25
mainloop_set_trigger
void mainloop_set_trigger(crm_trigger_t *source)
Definition: mainloop.c:213
ipc.h
Wrappers for and extensions to libqb IPC.
mainloop_clear_child_userdata
void mainloop_clear_child_userdata(mainloop_child_t *child)
Definition: mainloop.c:888
mainloop_fd_callbacks::dispatch
int(* dispatch)(gpointer userdata)
Definition: mainloop.h:84
mainloop_child_t
struct mainloop_child_s mainloop_child_t
Definition: mainloop.h:30
mainloop_del_fd
void mainloop_del_fd(mainloop_io_t *client)
Definition: mainloop.c:848
mainloop_timer_add
mainloop_timer_t * mainloop_timer_add(const char *name, guint period_ms, bool repeat, GSourceFunc cb, void *userdata)
Definition: mainloop.c:1213
mainloop_io_t
struct mainloop_io_s mainloop_io_t
Definition: mainloop.h:29
mainloop_del_ipc_client
void mainloop_del_ipc_client(mainloop_io_t *client)
Definition: mainloop.c:789
mainloop_timer_running
bool mainloop_timer_running(mainloop_timer_t *t)
Definition: mainloop.c:1170
mainloop_child_add_with_flags
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
mainloop_child_add
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
mainloop_trigger_complete
void mainloop_trigger_complete(crm_trigger_t *trig)
Definition: mainloop.c:189
ipc_client_callbacks::dispatch
int(* dispatch)(const char *buffer, ssize_t length, gpointer userdata)
Definition: mainloop.h:67
crm_signal
gboolean crm_signal(int sig, void(*dispatch)(int sig))
Definition: mainloop.c:290
mainloop_timer_set_period
guint mainloop_timer_set_period(mainloop_timer_t *t, guint period_ms)
Definition: mainloop.c:1196
mainloop_cleanup
void mainloop_cleanup(void)
Definition: mainloop.c:400
crm_ipc_t
struct crm_ipc_s crm_ipc_t
Definition: ipc.h:58
mainloop_add_ipc_client
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