termux-packages/root-packages/ettercap/src-ec_threads.c.patch

59 lines
1.6 KiB
Diff

--- a/src/ec_threads.c
+++ b/src/ec_threads.c
@@ -233,6 +233,13 @@ pthread_t ec_thread_new_detached(char *n
return id;
}
+#ifdef __ANDROID__
+static void thread_signal_handler(int signum)
+{
+ pthread_exit(0);
+}
+#endif
+
/*
* set the state of a thread
* all the new thread MUST call this on startup
@@ -250,8 +257,17 @@ void ec_thread_init(void)
* allow a thread to be cancelled as soon as the
* cancellation request is received
*/
+#ifndef __ANDROID__
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
+#else
+ 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
/* sync with the creator */
if ((e = pthread_cond_signal(&init_cond)))
@@ -275,7 +291,11 @@ void ec_thread_destroy(pthread_t id)
/* send the cancel signal to the thread */
+#ifndef __ANDROID__
pthread_cancel((pthread_t)id);
+#else
+ pthread_kill((pthread_t)id, SIGUSR2);
+#endif
DEBUG_MSG("ec_thread_destroy -- [%s] terminated", ec_thread_getname(id));
@@ -331,7 +351,11 @@ void ec_thread_kill_all(void)
DEBUG_MSG("ec_thread_kill_all -- terminating %lu [%s]", PTHREAD_ID(current->t.id), current->t.name);
/* send the cancel signal to the thread */
+#ifndef __ANDROID__
pthread_cancel((pthread_t)current->t.id);
+#else
+ pthread_kill((pthread_t)current->t.id, SIGUSR2);
+#endif
#ifndef BROKEN_PTHREAD_JOIN
if (!current->t.detached) {