diff --git a/client/proxmark3.c b/client/proxmark3.c index e6f239329..461a30c30 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -372,11 +372,7 @@ int main(int argc, char* argv[]) { #else main_loop(script_cmds_file, usb_present); #endif - - // Clean up the port - if (usb_present) - uart_close(sp); - + // clean up mutex pthread_mutex_destroy(&print_lock); diff --git a/uart/uart_posix.c b/uart/uart_posix.c index dcf5d4bd4..11ded0dc5 100644 --- a/uart/uart_posix.c +++ b/uart/uart_posix.c @@ -112,7 +112,7 @@ serial_port uart_open(const char* pcPortName) sp->tiNew.c_cc[VTIME] = 0; // Try to set the new terminal info struct - if(tcsetattr(sp->fd,TCSANOW,&sp->tiNew) == -1) { + if(tcsetattr(sp->fd, TCSANOW, &sp->tiNew) == -1) { uart_close(sp); return INVALID_SERIAL_PORT; } @@ -128,9 +128,13 @@ serial_port uart_open(const char* pcPortName) } void uart_close(const serial_port sp) { + if (!sp) return; + if (sp == INVALID_SERIAL_PORT) return; + if (sp == CLAIMED_SERIAL_PORT) return; + serial_port_unix* spu = (serial_port_unix*)sp; - tcflush(spu->fd,TCIOFLUSH); - tcsetattr(spu->fd,TCSANOW,&(spu->tiOld)); + tcflush(spu->fd, TCIOFLUSH); + tcsetattr(spu->fd, TCSANOW, &(spu->tiOld)); struct flock fl; fl.l_type = F_UNLCK; fl.l_whence = SEEK_SET; diff --git a/uart/uart_win32.c b/uart/uart_win32.c index 0927a427d..d8e41cfa4 100644 --- a/uart/uart_win32.c +++ b/uart/uart_win32.c @@ -69,7 +69,7 @@ serial_port uart_open(const char* pcPortName) { sp->hPort = CreateFileA(acPortName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (sp->hPort == INVALID_HANDLE_VALUE) { uart_close(sp); - return INVALID_SERIAL_PORT; + return INVALID_SERIAL_PORT; } // Prepare the device control @@ -107,7 +107,9 @@ serial_port uart_open(const char* pcPortName) { } void uart_close(const serial_port sp) { - if (!sp) return; + if (!sp) return; + if (sp == INVALID_SERIAL_PORT) return; + if (sp == CLAIMED_SERIAL_PORT) return; if (((serial_port_windows*)sp)->hPort != NULL ) CloseHandle(((serial_port_windows*)sp)->hPort); free(sp);