mirror of
				https://github.com/rtlsdrblog/rtl-sdr-blog.git
				synced 2025-10-30 16:38:07 +01:00 
			
		
		
		
	fix segv on reconnect
Signed-off-by: Hoernchen <la@tfc-server.de> improve staibility (for sdr#) Signed-off-by: Hoernchen <la@tfc-server.de>
This commit is contained in:
		| @@ -123,8 +123,10 @@ sighandler(int signum) | ||||
| static void sighandler(int signum) | ||||
| { | ||||
| 	fprintf(stderr, "Signal caught, exiting!\n"); | ||||
| 	do_exit = 1; | ||||
| 	rtlsdr_cancel_async(dev); | ||||
| 	if (!do_exit) { | ||||
|       rtlsdr_cancel_async(dev); | ||||
|       do_exit = 1; | ||||
|     } | ||||
| } | ||||
| #endif | ||||
|  | ||||
| @@ -206,11 +208,15 @@ static void *tcp_worker(void *arg) | ||||
| 				r = select(s+1, NULL, &writefds, NULL, &tv); | ||||
| 				if(r) { | ||||
| 					bytessent = send(s,  &curelem->data[index], bytesleft, 0); | ||||
| 					if (bytessent == SOCKET_ERROR || do_exit) { | ||||
| 						printf("worker socket error\n"); | ||||
| 					if (bytessent == SOCKET_ERROR) { | ||||
|                         perror("worker socket error"); | ||||
| 						sighandler(0); | ||||
| 						dead[0]=1; | ||||
| 						pthread_exit(NULL); | ||||
| 					} else if (do_exit) { | ||||
| 						printf("do_exit\n"); | ||||
| 						dead[0]=1; | ||||
| 						pthread_exit(NULL); | ||||
| 					} else { | ||||
| 						bytesleft -= bytessent; | ||||
| 						index += bytessent; | ||||
| @@ -260,11 +266,15 @@ static void *command_worker(void *arg) | ||||
| 			r = select(s+1, &readfds, NULL, NULL, &tv); | ||||
| 			if(r) { | ||||
| 				received = recv(s, (char*)&cmd+(sizeof(cmd)-left), left, 0); | ||||
| 				if(received == SOCKET_ERROR || do_exit){ | ||||
| 					printf("comm recv socket error\n"); | ||||
| 				if(received == SOCKET_ERROR){ | ||||
|                     perror("comm recv socket error"); | ||||
| 					sighandler(0); | ||||
| 					dead[1]=1; | ||||
| 					pthread_exit(NULL); | ||||
| 				} else if(do_exit){ | ||||
| 					printf("do exit\n"); | ||||
| 					dead[1]=1; | ||||
| 					pthread_exit(NULL); | ||||
| 				} else { | ||||
| 					left -= received; | ||||
| 				} | ||||
| @@ -514,12 +524,14 @@ int main(int argc, char **argv) | ||||
| 		r = rtlsdr_read_async(dev, rtlsdr_callback, (void *)0, | ||||
| 				      buf_num, 0); | ||||
|  | ||||
| 		closesocket(s); | ||||
| 		if(!dead[0]) | ||||
| 			pthread_join(tcp_worker_thread, &status); | ||||
|         dead[0]=0; | ||||
|  | ||||
| 		if(!dead[1]) | ||||
| 			pthread_join(command_thread, &status); | ||||
|         dead[1]=0; | ||||
| 		closesocket(s); | ||||
|  | ||||
| 		printf("all threads dead..\n"); | ||||
| 		curelem = ll_buffers; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user