#include "common.h"
-ev_io i3_connection;
-ev_timer reconn;
+ev_io *i3_connection;
+ev_timer *reconn = NULL;
const char *sock_path;
*
*/
void reconnect() {
- ev_timer_init(&reconn, retry_connection, 0.25, 0.25);
- ev_timer_start(main_loop, &reconn);
+ if (reconn == NULL) {
+ if ((reconn = malloc(sizeof(ev_timer))) == NULL) {
+ ELOG("malloc() failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ }
+ ev_timer_init(reconn, retry_connection, 0.25, 0.25);
+ ev_timer_start(main_loop, reconn);
}
/*
uint32_t written = 0;
while (to_write > 0) {
- int n = write(i3_connection.fd, buffer + written, to_write);
+ int n = write(i3_connection->fd, buffer + written, to_write);
if (n == -1) {
ELOG("write() failed: %s\n", strerror(errno));
exit(EXIT_FAILURE);
return 0;
}
- ev_io_init(&i3_connection, &got_data, sockfd, EV_READ);
- ev_io_start(main_loop, &i3_connection);
+ i3_connection = malloc(sizeof(ev_io));
+ if (i3_connection == NULL) {
+ ELOG("malloc() failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ ev_io_init(i3_connection, &got_data, sockfd, EV_READ);
+ ev_io_start(main_loop, i3_connection);
return 1;
}
* Destroy the connection to i3.
*/
void destroy_connection() {
- close(i3_connection.fd);
- ev_io_stop(main_loop, &i3_connection);
+ close(i3_connection->fd);
+ ev_io_stop(main_loop, i3_connection);
}
/*
/* We listen to SIGTERM/QUIT/INT and try to exit cleanly, by stopping the main-loop.
* We only need those watchers on the stack, so putting them on the stack saves us
* some calls to free() */
- ev_signal sig_term, sig_int, sig_hup;
+ ev_signal *sig_term = malloc(sizeof(ev_signal));
+ ev_signal *sig_int = malloc(sizeof(ev_signal));
+ ev_signal *sig_hup = malloc(sizeof(ev_signal));
- ev_signal_init(&sig_term, &sig_cb, SIGTERM);
- ev_signal_init(&sig_int, &sig_cb, SIGINT);
- ev_signal_init(&sig_hup, &sig_cb, SIGHUP);
+ if (sig_term == NULL || sig_int == NULL || sig_hup == NULL) {
+ ELOG("malloc() failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ ev_signal_init(sig_term, &sig_cb, SIGTERM);
+ ev_signal_init(sig_int, &sig_cb, SIGINT);
+ ev_signal_init(sig_hup, &sig_cb, SIGHUP);
- ev_signal_start(main_loop, &sig_term);
- ev_signal_start(main_loop, &sig_int);
- ev_signal_start(main_loop, &sig_hup);
+ ev_signal_start(main_loop, sig_term);
+ ev_signal_start(main_loop, sig_int);
+ ev_signal_start(main_loop, sig_hup);
/* From here on everything should run smooth for itself, just start listening for
* events. We stop simply stop the event-loop, when we are finished */