Skip to content

Commit

Permalink
shared/mainloop: Remove mainloop_set_signal
Browse files Browse the repository at this point in the history
This removes mainloop_set_signal and replaces it usage with
mainloop_run_with_signal.
  • Loading branch information
Vudentz committed Dec 5, 2018
1 parent 5202ea5 commit b597afa
Show file tree
Hide file tree
Showing 22 changed files with 24 additions and 292 deletions.
9 changes: 1 addition & 8 deletions android/bluetoothd-snoop.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,6 @@ static void set_capabilities(void)
int main(int argc, char *argv[])
{
const char *path;
sigset_t mask;

__btd_log_init(NULL, 0);

Expand All @@ -234,12 +233,6 @@ int main(int argc, char *argv[])

mainloop_init();

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);

mainloop_set_signal(&mask, signal_callback, NULL, NULL);

if (!strcmp(DEFAULT_SNOOP_FILE, path))
rename(DEFAULT_SNOOP_FILE, DEFAULT_SNOOP_FILE ".old");

Expand All @@ -250,7 +243,7 @@ int main(int argc, char *argv[])

info("bluetoothd_snoop: started");

mainloop_run();
mainloop_run_with_signal(signal_callback, NULL);

close_monitor();

Expand Down
10 changes: 1 addition & 9 deletions android/system-emulator.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,19 +216,11 @@ static void signal_callback(int signum, void *user_data)
int main(int argc, char *argv[])
{
const char SYSTEM_SOCKET_PATH[] = "\0android_system";
sigset_t mask;
struct sockaddr_un addr;
int fd;

mainloop_init();

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);
sigaddset(&mask, SIGCHLD);

mainloop_set_signal(&mask, signal_callback, NULL, NULL);

printf("Android system emulator ver %s\n", VERSION);

snprintf(exec_dir, sizeof(exec_dir), "%s", dirname(argv[0]));
Expand All @@ -254,5 +246,5 @@ int main(int argc, char *argv[])
/* Make sure bluetoothd creates files with proper permissions */
umask(0177);

return mainloop_run();
return mainloop_run_with_signal(signal_callback, NULL);
}
9 changes: 1 addition & 8 deletions emulator/b1ee.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,6 @@ int main(int argc, char *argv[])
char *server_port = NULL, *sniffer_port = NULL;
int ret = EXIT_FAILURE;
ssize_t written;
sigset_t mask;

for (;;) {
int opt;
Expand Down Expand Up @@ -323,17 +322,11 @@ int main(int argc, char *argv[])

mainloop_init();

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);

mainloop_set_signal(&mask, signal_callback, NULL, NULL);

mainloop_add_fd(sniffer_fd, EPOLLIN, sniffer_read_callback, NULL, NULL);
mainloop_add_fd(server_fd, EPOLLIN, server_read_callback, NULL, NULL);
mainloop_add_fd(vhci_fd, EPOLLIN, vhci_read_callback, NULL, NULL);

ret = mainloop_run();
ret = mainloop_run_with_signal(signal_callback, NULL);

goto done;

Expand Down
10 changes: 1 addition & 9 deletions emulator/hfp.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,18 +103,10 @@ static void signal_callback(int signum, void *user_data)

int main(int argc, char *argv[])
{
sigset_t mask;

mainloop_init();

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);

mainloop_set_signal(&mask, signal_callback, NULL, NULL);

if (!open_connection())
return EXIT_FAILURE;

return mainloop_run();
return mainloop_run_with_signal(signal_callback, NULL);
}
9 changes: 1 addition & 8 deletions emulator/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ int main(int argc, char *argv[])
int amptest_count = 0;
int vhci_count = 0;
enum vhci_type vhci_type = VHCI_TYPE_BREDRLE;
sigset_t mask;
int i;

mainloop_init();
Expand Down Expand Up @@ -154,12 +153,6 @@ int main(int argc, char *argv[])
return EXIT_FAILURE;
}

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);

mainloop_set_signal(&mask, signal_callback, NULL, NULL);

printf("Bluetooth emulator ver %s\n", VERSION);

for (i = 0; i < letest_count; i++) {
Expand Down Expand Up @@ -227,5 +220,5 @@ int main(int argc, char *argv[])
fprintf(stderr, "Failed to open monitor server\n");
}

return mainloop_run();
return mainloop_run_with_signal(signal_callback, NULL);
}
9 changes: 1 addition & 8 deletions monitor/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ int main(int argc, char *argv[])
unsigned short ellisys_port = 0;
const char *str;
int exit_status;
sigset_t mask;

mainloop_init();

Expand Down Expand Up @@ -219,12 +218,6 @@ int main(int argc, char *argv[])
return EXIT_FAILURE;
}

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);

mainloop_set_signal(&mask, signal_callback, NULL, NULL);

printf("Bluetooth monitor ver %s\n", VERSION);

keys_setup();
Expand Down Expand Up @@ -258,7 +251,7 @@ int main(int argc, char *argv[])
if (tty && control_tty(tty, tty_speed) < 0)
return EXIT_FAILURE;

exit_status = mainloop_run();
exit_status = mainloop_run_with_signal(signal_callback, NULL);

keys_cleanup();

Expand Down
10 changes: 1 addition & 9 deletions peripheral/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,21 +184,13 @@ static void signal_callback(int signum, void *user_data)

int main(int argc, char *argv[])
{
sigset_t mask;
int exit_status;

if (getpid() == 1 && getppid() == 0)
is_init = true;

mainloop_init();

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);
sigaddset(&mask, SIGCHLD);

mainloop_set_signal(&mask, signal_callback, NULL, NULL);

printf("Bluetooth periperhal ver %s\n", VERSION);

prepare_filesystem();
Expand Down Expand Up @@ -235,7 +227,7 @@ int main(int argc, char *argv[])
if (is_init)
attach_start();

exit_status = mainloop_run();
exit_status = mainloop_run_with_signal(signal_callback, NULL);

if (is_init)
attach_stop();
Expand Down
79 changes: 0 additions & 79 deletions src/shared/mainloop.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,6 @@ struct timeout_data {
void *user_data;
};

struct signal_data {
int fd;
sigset_t mask;
mainloop_signal_func callback;
mainloop_destroy_func destroy;
void *user_data;
};

static struct signal_data *signal_data;

void mainloop_init(void)
{
unsigned int i;
Expand Down Expand Up @@ -110,45 +100,10 @@ void mainloop_exit_failure(void)
epoll_terminate = 1;
}

static void signal_callback(int fd, uint32_t events, void *user_data)
{
struct signal_data *data = user_data;
struct signalfd_siginfo si;
ssize_t result;

if (events & (EPOLLERR | EPOLLHUP)) {
mainloop_quit();
return;
}

result = read(fd, &si, sizeof(si));
if (result != sizeof(si))
return;

if (data->callback)
data->callback(si.ssi_signo, data->user_data);
}

int mainloop_run(void)
{
unsigned int i;

if (signal_data) {
if (sigprocmask(SIG_BLOCK, &signal_data->mask, NULL) < 0)
return EXIT_FAILURE;

signal_data->fd = signalfd(-1, &signal_data->mask,
SFD_NONBLOCK | SFD_CLOEXEC);
if (signal_data->fd < 0)
return EXIT_FAILURE;

if (mainloop_add_fd(signal_data->fd, EPOLLIN,
signal_callback, signal_data, NULL) < 0) {
close(signal_data->fd);
return EXIT_FAILURE;
}
}

while (!epoll_terminate) {
struct epoll_event events[MAX_EPOLL_EVENTS];
int n, nfds;
Expand All @@ -165,14 +120,6 @@ int mainloop_run(void)
}
}

if (signal_data) {
mainloop_remove_fd(signal_data->fd);
close(signal_data->fd);

if (signal_data->destroy)
signal_data->destroy(signal_data->user_data);
}

for (i = 0; i < MAX_MAINLOOP_ENTRIES; i++) {
struct mainloop_data *data = mainloop_list[i];

Expand Down Expand Up @@ -384,29 +331,3 @@ int mainloop_remove_timeout(int id)
{
return mainloop_remove_fd(id);
}

int mainloop_set_signal(sigset_t *mask, mainloop_signal_func callback,
void *user_data, mainloop_destroy_func destroy)
{
struct signal_data *data;

if (!mask || !callback)
return -EINVAL;

data = malloc(sizeof(*data));
if (!data)
return -ENOMEM;

memset(data, 0, sizeof(*data));
data->callback = callback;
data->destroy = destroy;
data->user_data = user_data;

data->fd = -1;
memcpy(&data->mask, mask, sizeof(sigset_t));

free(signal_data);
signal_data = data;

return 0;
}
54 changes: 4 additions & 50 deletions src/shared/shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -864,27 +864,18 @@ static bool io_hup(struct io *io, void *user_data)
return false;
}

static bool signal_read(struct io *io, void *user_data)
static void signal_callback(int signum, void *user_data)
{
static bool terminated = false;
struct signalfd_siginfo si;
ssize_t result;
int fd;

fd = io_get_fd(io);

result = read(fd, &si, sizeof(si));
if (result != sizeof(si))
return false;

switch (si.ssi_signo) {
switch (signum) {
case SIGINT:
if (data.input && !data.mode) {
rl_replace_line("", 0);
rl_crlf();
rl_on_new_line();
rl_redisplay();
return true;
return;
}

/*
Expand All @@ -907,38 +898,6 @@ static bool signal_read(struct io *io, void *user_data)
terminated = true;
break;
}

return false;
}

static struct io *setup_signalfd(void)
{
struct io *io;
sigset_t mask;
int fd;

sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGTERM);

if (sigprocmask(SIG_BLOCK, &mask, NULL) < 0) {
perror("Failed to set signal mask");
return 0;
}

fd = signalfd(-1, &mask, 0);
if (fd < 0) {
perror("Failed to create signal descriptor");
return 0;
}

io = io_new(fd);

io_set_close_on_destroy(io, true);
io_set_read_handler(io, signal_read, NULL, NULL);
io_set_disconnect_handler(io, io_hup, NULL, NULL);

return io;
}

static void rl_init_history(void)
Expand Down Expand Up @@ -1132,14 +1091,9 @@ static void env_destroy(void *data)

int bt_shell_run(void)
{
struct io *signal;
int status;

signal = setup_signalfd();

status = mainloop_run();

io_destroy(signal);
status = mainloop_run_with_signal(signal_callback, NULL);

bt_shell_cleanup();

Expand Down
Loading

0 comments on commit b597afa

Please sign in to comment.