--- a/src/io.c +++ b/src/io.c @@ -48,6 +48,13 @@ #include "calcurse.h" #include "sha1.h" +#ifdef __ANDROID__ +static void thread_signal_handler(int signum) +{ + pthread_exit(0); +} +#endif + struct ht_keybindings_s { const char *label; enum vkey key; @@ -1432,12 +1439,23 @@ /* Thread used to periodically save data. */ static void *io_psave_thread(void *arg) { +#ifdef __ANDROID__ + struct sigaction actions; + memset(&actions, 0, sizeof(actions)); + sigemptyset(&actions.sa_mask); + actions.sa_flags = 0; + actions.sa_handler = thread_signal_handler; + sigaction(SIGUSR2, &actions, NULL); +#endif + int delay = conf.periodic_save; EXIT_IF(delay < 0, _("Invalid delay")); char *mesg = _("Periodic save cancelled. Data files have changed. " "Save and merge interactively"); +#ifndef __ANDROID__ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); +#endif for (;;) { sleep(delay * MININSEC); pthread_mutex_lock(&io_periodic_save_mutex); @@ -1462,7 +1480,11 @@ /* Lock the mutex to avoid cancelling the thread during saving. */ pthread_mutex_lock(&io_periodic_save_mutex); +#ifndef __ANDROID__ pthread_cancel(io_t_psave); +#else + pthread_kill(io_t_psave, SIGUSR2); +#endif pthread_join(io_t_psave, NULL); pthread_mutex_unlock(&io_periodic_save_mutex); io_t_psave = pthread_self(); --- a/src/notify.c +++ b/src/notify.c @@ -42,6 +42,14 @@ #include "calcurse.h" +#ifdef __ANDROID__ +#include +static void thread_signal_handler(int signum) +{ + pthread_exit(0); +} +#endif + #define NOTIFY_FIELD_LENGTH 25 struct notify_vars { @@ -194,7 +202,11 @@ if (pthread_equal(notify_t_main, pthread_self())) return; +#ifndef __ANDROID__ pthread_cancel(notify_t_main); +#else + pthread_kill(notify_t_main, SIGUSR2); +#endif pthread_join(notify_t_main, NULL); notify_t_main = pthread_self(); } @@ -324,6 +336,15 @@ /* ARGSUSED0 */ static void *notify_main_thread(void *arg) { +#ifdef __ANDROID__ + struct sigaction actions; + memset(&actions, 0, sizeof(actions)); + sigemptyset(&actions.sa_mask); + actions.sa_flags = 0; + actions.sa_handler = thread_signal_handler; + sigaction(SIGUSR2, &actions, NULL); +#endif + const unsigned thread_sleep = 1; const unsigned check_app = MININSEC; int elapse = 0; --- a/src/ui-calendar.c +++ b/src/ui-calendar.c @@ -44,6 +44,14 @@ #include "calcurse.h" +#ifdef __ANDROID__ +#include +static void thread_signal_handler(int signum) +{ + pthread_exit(0); +} +#endif + static struct date today, slctd_day; static unsigned ui_calendar_view; static int wday_start; /* this is used in signed arithmetic */ @@ -89,6 +97,15 @@ /* ARGSUSED0 */ static void *ui_calendar_date_thread(void *arg) { +#ifdef __ANDROID__ + struct sigaction actions; + memset(&actions, 0, sizeof(actions)); + sigemptyset(&actions.sa_mask); + actions.sa_flags = 0; + actions.sa_handler = thread_signal_handler; + sigaction(SIGUSR2, &actions, NULL); +#endif + time_t actual, tomorrow; for (;;) { @@ -118,7 +135,11 @@ if (pthread_equal(ui_calendar_t_date, pthread_self())) return; +#ifndef __ANDROID__ pthread_cancel(ui_calendar_t_date); +#else + pthread_kill(ui_calendar_t_date, SIGUSR2); +#endif pthread_join(ui_calendar_t_date, NULL); ui_calendar_t_date = pthread_self(); }