View | Details | Raw Unified | Return to bug 1220
Collapse All | Expand All

(-)a/src/core/model/unix-fd-reader.cc (-12 / +17 lines)
 Lines 110-124    Link Here 
110
{
110
{
111
  m_stop = true;
111
  m_stop = true;
112
112
113
  // signal the read thread and close the write end of the event pipe
113
  // signal the read thread
114
  if (m_evpipe[1] != -1)
114
  if (m_evpipe[1] != -1)
115
    {
115
    {
116
      char zero = 0;
116
      char zero = 0;
117
      ssize_t len = write (m_evpipe[1], &zero, sizeof (zero));
117
      ssize_t len = write (m_evpipe[1], &zero, sizeof (zero));
118
      if (len != sizeof (zero))
118
      if (len != sizeof (zero))
119
        NS_LOG_WARN ("incomplete write(): " << strerror (errno));
119
        NS_LOG_WARN ("incomplete write(): " << strerror (errno));
120
      close (m_evpipe[1]);
121
      m_evpipe[1] = -1;
122
    }
120
    }
123
121
124
  // join the read thread
122
  // join the read thread
 Lines 128-133    Link Here 
128
      m_readThread = 0;
126
      m_readThread = 0;
129
    }
127
    }
130
128
129
  // close the write end of the event pipe
130
  if (m_evpipe[1] != -1)
131
    {
132
      close (m_evpipe[1]);
133
      m_evpipe[1] = -1;
134
    }
135
131
  // close the read end of the event pipe
136
  // close the read end of the event pipe
132
  if (m_evpipe[0] != -1)
137
  if (m_evpipe[0] != -1)
133
    {
138
    {
 Lines 167-192    Link Here 
167
      if (FD_ISSET (m_evpipe[0], &readfds))
172
      if (FD_ISSET (m_evpipe[0], &readfds))
168
        {
173
        {
169
          // drain the event pipe
174
          // drain the event pipe
170
          ssize_t len;
171
          for (;;)
175
          for (;;)
172
            {
176
            {
173
              char buf[1024];
177
              char buf[1024];
174
              len = read (m_evpipe[0], buf, sizeof (buf));
178
              ssize_t len = read (m_evpipe[0], buf, sizeof (buf));
175
              if (len == 0)
179
              if (len == 0)
176
                {
180
                {
177
                  NS_FATAL_ERROR ("event pipe closed");
181
                  NS_FATAL_ERROR ("event pipe closed");
178
                }
182
                }
179
              if (len < 0)
183
              if (len < 0)
180
                {
184
                {
181
                  break;
185
                  if (errno == EAGAIN || errno == EINTR || errno == EWOULDBLOCK)
186
                    {
187
                      break;
188
                    }
189
                  else
190
                    {
191
                      NS_FATAL_ERROR ("read() failed: " << strerror (errno));
192
                    }
182
                }
193
                }
183
            }
194
            }
184
185
          if (len < 0 && errno != EAGAIN && errno != EWOULDBLOCK)
186
            {
187
              NS_LOG_WARN ("read() failed: " << strerror (errno));
188
              break;
189
            }
190
        }
195
        }
191
196
192
      if (m_stop)
197
      if (m_stop)

Return to bug 1220