| #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 */ |