summaryrefslogtreecommitdiff
path: root/compat/fsmonitor/fsm-listen.h
blob: 41650bf897221767b46566e17e470e24209911fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#ifndef FSM_LISTEN_H
#define FSM_LISTEN_H
 
/* This needs to be implemented by each backend */
 
#ifdef HAVE_FSMONITOR_DAEMON_BACKEND
 
struct fsmonitor_daemon_state;
 
/*
 * Initialize platform-specific data for the fsmonitor listener thread.
 * This will be called from the main thread PRIOR to staring the
 * fsmonitor_fs_listener thread.
 *
 * Returns 0 if successful.
 * Returns -1 otherwise.
 */
int fsm_listen__ctor(struct fsmonitor_daemon_state *state);
 
/*
 * Cleanup platform-specific data for the fsmonitor listener thread.
 * This will be called from the main thread AFTER joining the listener.
 */
void fsm_listen__dtor(struct fsmonitor_daemon_state *state);
 
/*
 * The main body of the platform-specific event loop to watch for
 * filesystem events.  This will run in the fsmonitor_fs_listen thread.
 *
 * It should call `ipc_server_stop_async()` if the listener thread
 * prematurely terminates (because of a filesystem error or if it
 * detects that the .git directory has been deleted).  (It should NOT
 * do so if the listener thread receives a normal shutdown signal from
 * the IPC layer.)
 *
 * It should set `state->listen_error_code` to -1 if the daemon should exit
 * with an error.
 */
void fsm_listen__loop(struct fsmonitor_daemon_state *state);
 
/*
 * Gently request that the fsmonitor listener thread shutdown.
 * It does not wait for it to stop.  The caller should do a JOIN
 * to wait for it.
 */
void fsm_listen__stop_async(struct fsmonitor_daemon_state *state);
 
#endif /* HAVE_FSMONITOR_DAEMON_BACKEND */
#endif /* FSM_LISTEN_H */