Add some assertions
This commit is contained in:
		
							parent
							
								
									d3c61d83be
								
							
						
					
					
						commit
						1eb0af7ed5
					
				
					 1 changed files with 6 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <thread>
 | 
			
		||||
#include <atomic>
 | 
			
		||||
 | 
			
		||||
#include <poll.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -14,10 +15,12 @@ class MonitorFdHup
 | 
			
		|||
{
 | 
			
		||||
private:
 | 
			
		||||
    std::thread thread;
 | 
			
		||||
    std::atomic_bool quit;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    MonitorFdHup(int fd)
 | 
			
		||||
    {
 | 
			
		||||
        quit = false;
 | 
			
		||||
        thread = std::thread([&]() {
 | 
			
		||||
            /* Wait indefinitely until a POLLHUP occurs. */
 | 
			
		||||
            struct pollfd fds[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -25,8 +28,10 @@ public:
 | 
			
		|||
            fds[0].events = 0;
 | 
			
		||||
            if (poll(fds, 1, -1) == -1) {
 | 
			
		||||
                if (errno != EINTR) abort(); // can't happen
 | 
			
		||||
                assert(quit);
 | 
			
		||||
                return; // destructor is asking us to exit
 | 
			
		||||
            }
 | 
			
		||||
            assert(fds[0].revents & POLLHUP);
 | 
			
		||||
            /* We got POLLHUP, so send an INT signal to the main thread. */
 | 
			
		||||
            kill(getpid(), SIGINT);
 | 
			
		||||
        });
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +39,7 @@ public:
 | 
			
		|||
 | 
			
		||||
    ~MonitorFdHup()
 | 
			
		||||
    {
 | 
			
		||||
        quit = true;
 | 
			
		||||
        pthread_kill(thread.native_handle(), SIGINT);
 | 
			
		||||
        thread.join();
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue