mirror of
https://github.com/kovidgoyal/kitty.git
synced 2026-09-01 06:41:30 +00:00
Move code to handle loop wakeup and signals into its own module
This commit is contained in:
parent
556992a117
commit
5dc4e79c8d
4 changed files with 182 additions and 109 deletions
49
kitty/loop-utils.h
Normal file
49
kitty/loop-utils.h
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Copyright (C) 2019 Kovid Goyal <kovid at kovidgoyal.net>
|
||||
*
|
||||
* Distributed under terms of the GPL3 license.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "data-types.h"
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
typedef struct {
|
||||
int wakeup_fds[2];
|
||||
int signal_fds[2];
|
||||
int wakeup_read_fd;
|
||||
int signal_read_fd;
|
||||
} LoopData;
|
||||
typedef void(*handle_signal_func)(int, void *data);
|
||||
|
||||
bool init_loop_data(LoopData *ld);
|
||||
void free_loop_data(LoopData *ld);
|
||||
void wakeup_loop(LoopData *ld, bool in_signal_handler);
|
||||
bool install_signal_handlers(LoopData *ld);
|
||||
void read_signals(int fd, handle_signal_func callback, void *data);
|
||||
|
||||
static inline bool
|
||||
self_pipe(int fds[2], bool nonblock) {
|
||||
#ifdef __APPLE__
|
||||
int flags;
|
||||
flags = pipe(fds);
|
||||
if (flags != 0) return false;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
flags = fcntl(fds[i], F_GETFD);
|
||||
if (flags == -1) { return false; }
|
||||
if (fcntl(fds[i], F_SETFD, flags | FD_CLOEXEC) == -1) { return false; }
|
||||
if (nonblock) {
|
||||
flags = fcntl(fds[i], F_GETFL);
|
||||
if (flags == -1) { return false; }
|
||||
if (fcntl(fds[i], F_SETFL, flags | O_NONBLOCK) == -1) { return false; }
|
||||
}
|
||||
}
|
||||
return true;
|
||||
#else
|
||||
int flags = O_CLOEXEC;
|
||||
if (nonblock) flags |= O_NONBLOCK;
|
||||
return pipe2(fds, flags) == 0;
|
||||
#endif
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue