From: pwpiwi Date: Sat, 6 Oct 2018 15:35:40 +0000 (+0200) Subject: Merge branch 'master' of https://github.com/Proxmark/proxmark3 X-Git-Tag: v3.1.0~7 X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/a025b746061af979f479138b2c0af07f6d3c5f31?hp=b49aec796c7f1dd7032b879681643dbe465ea72a Merge branch 'master' of https://github.com/Proxmark/proxmark3 --- diff --git a/client/comms.c b/client/comms.c index 2030f8f3..86dca3ed 100644 --- a/client/comms.c +++ b/client/comms.c @@ -333,7 +333,20 @@ bool OpenProxmark(void *port, bool wait_for_port, int timeout, bool flash_mode) void CloseProxmark(void) { conn.run = false; + +#ifdef __BIONIC__ + // In Android O and later, if an invalid pthread_t is passed to pthread_join, it calls fatal(). + // https://github.com/aosp-mirror/platform_bionic/blob/ed16b344e75f422fb36fbfd91fb30de339475880/libc/bionic/pthread_internal.cpp#L116-L128 + // + // In Bionic libc, pthread_t is an integer. + + if (USB_communication_thread != 0) { + pthread_join(USB_communication_thread, NULL); + } +#else + // pthread_t is a struct on other libc, treat as an opaque memory reference pthread_join(USB_communication_thread, NULL); +#endif if (sp) { uart_close(sp); @@ -351,6 +364,7 @@ void CloseProxmark(void) { // Clean up our state sp = NULL; serial_port_name = NULL; + memset(&USB_communication_thread, 0, sizeof(pthread_t)); }