Poll error is not longer breaking everything
This commit is contained in:
		
							parent
							
								
									785cbff2a7
								
							
						
					
					
						commit
						2ad4f5b52d
					
				| @ -212,7 +212,7 @@ namespace een9 { | |||||||
|             pthread_create(&workers[i], NULL, worker_func, wtes[i].get()); |             pthread_create(&workers[i], NULL, worker_func, wtes[i].get()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // todo: move this try block inside the loop
 |         // todo: right now this try block protects threads. So I need to put pthreads in some kind of guarding object
 | ||||||
|         try { |         try { | ||||||
|             int ret; |             int ret; | ||||||
|             struct Ear { |             struct Ear { | ||||||
| @ -251,18 +251,16 @@ namespace een9 { | |||||||
|             } |             } | ||||||
|             ASSERT(params.mainloop_recheck_interval_us > 0, "Incorrect poll timeout"); |             ASSERT(params.mainloop_recheck_interval_us > 0, "Incorrect poll timeout"); | ||||||
|             while (true) { |             while (true) { | ||||||
|                 // MutexLockGuard lg1(wtec.corvee_bed, "poller termination check");
 |  | ||||||
|                 if (wtec.termination) |                 if (wtec.termination) | ||||||
|                     break; |                     break; | ||||||
|                 // lg1.unlock();
 |  | ||||||
|                 for (size_t i = 0; i < Nip; i++) { |                 for (size_t i = 0; i < Nip; i++) { | ||||||
|                     pollfds[i].revents = 0; |                     pollfds[i].revents = 0; | ||||||
|                 } |                 } | ||||||
|                 errno = 0; |                 errno = 0; | ||||||
|                 ret = poll(pollfds.data(), Nip, params.mainloop_recheck_interval_us); |                 ret = poll(pollfds.data(), Nip, params.mainloop_recheck_interval_us); | ||||||
|                 if (errno == EINTR) |                 if (ret != 0) { | ||||||
|                     break; |                     printf("poll() error :> %d\n", errno); | ||||||
|                 // todo: do not end program here (in the loop. Nothing in the loop should be able to end program)
 |                 } | ||||||
|                 ASSERT_on_iret(ret, "poll()"); |                 ASSERT_on_iret(ret, "poll()"); | ||||||
|                 for (size_t i = 0; i < Nip; i++) { |                 for (size_t i = 0; i < Nip; i++) { | ||||||
|                     if ((pollfds[i].revents & POLLRDNORM)) { |                     if ((pollfds[i].revents & POLLRDNORM)) { | ||||||
| @ -294,7 +292,7 @@ namespace een9 { | |||||||
|         } catch (const std::exception& e) { |         } catch (const std::exception& e) { | ||||||
|             printf("System failure 2\n"); |             printf("System failure 2\n"); | ||||||
|             printf("%s\n", e.what()); |             printf("%s\n", e.what()); | ||||||
|             /* There is no need to tiptoe around this multi-access field. It is write-onle-and-for-good-kind  */ |             /* There is no need to tiptoe around this multi-access field. It is write-once-and-for-good-kind  */ | ||||||
|             wtec.termination = true; |             wtec.termination = true; | ||||||
|             wtec.corvee_bed.wake_them_all(); |             wtec.corvee_bed.wake_them_all(); | ||||||
|         } |         } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user