pthread_cancel() is not available on Android

Thus mosquitto_loop_start() and mosquitto_loop_stop()
won't be available there (and mosquitto_connect_async()
as a consequence).

Signed-off-by: Daniel d'Andrada <daniel.dandrada@esrlabs.com>
This commit is contained in:
Daniel d'Andrada 2019-06-06 15:04:14 +02:00
parent c6291034c5
commit 0970451762
3 changed files with 9 additions and 2 deletions

View File

@ -60,4 +60,9 @@
#define UNUSED(A) (void)(A)
/* Android Bionic libpthread implementation doesn't have pthread_cancel */
#ifndef ANDROID
# define HAVE_PTHREAD_CANCEL
#endif
#endif

View File

@ -201,11 +201,13 @@ void mosquitto__destroy(struct mosquitto *mosq)
if(!mosq) return;
#ifdef WITH_THREADING
# ifdef HAVE_PTHREAD_CANCEL
if(mosq->threaded == mosq_ts_self && !pthread_equal(mosq->thread_id, pthread_self())){
pthread_cancel(mosq->thread_id);
pthread_join(mosq->thread_id, NULL);
mosq->threaded = mosq_ts_none;
}
# endif
if(mosq->id){
/* If mosq->id is not NULL then the client has already been initialised

View File

@ -27,7 +27,7 @@ void *mosquitto__thread_main(void *obj);
int mosquitto_loop_start(struct mosquitto *mosq)
{
#ifdef WITH_THREADING
#if defined(WITH_THREADING) && defined(HAVE_PTHREAD_CANCEL)
if(!mosq || mosq->threaded != mosq_ts_none) return MOSQ_ERR_INVAL;
mosq->threaded = mosq_ts_self;
@ -43,7 +43,7 @@ int mosquitto_loop_start(struct mosquitto *mosq)
int mosquitto_loop_stop(struct mosquitto *mosq, bool force)
{
#ifdef WITH_THREADING
#if defined(WITH_THREADING) && defined(HAVE_PTHREAD_CANCEL)
# ifndef WITH_BROKER
char sockpair_data = 0;
# endif