Changeset 1731
- Timestamp:
- 11/23/09 14:05:19 (13 years ago)
- Files:
-
- trunk/libffado/src/libieee1394/IsoHandler.cpp (modified) (3 diffs)
- trunk/libffado/src/libieee1394/IsoHandler.h (modified) (2 diffs)
- trunk/libffado/src/libieee1394/IsoHandlerManager.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/src/libieee1394/IsoHandler.cpp
r1535 r1731 85 85 , m_speed( RAW1394_ISO_SPEED_400 ) 86 86 , m_prebuffers( 0 ) 87 , m_dont_exit_iterate_loop( true )88 87 , m_State( eHS_Stopped ) 89 88 , m_NextState( eHS_Stopped ) … … 421 420 422 421 // iterate the client if required 423 if(m_Client) { 424 enum raw1394_iso_disposition retval = m_Client->putPacket(data, length, channel, tag, sy, pkt_ctr, dropped_cycles); 425 if (retval == RAW1394_ISO_OK) { 426 if (m_dont_exit_iterate_loop) { 427 return RAW1394_ISO_OK; 428 } else { 429 m_dont_exit_iterate_loop = true; 430 debugOutput(DEBUG_LEVEL_VERBOSE, 431 "(%p) loop exit requested\n", 432 this); 433 return RAW1394_ISO_DEFER; 434 } 435 } else { 436 return retval; 437 } 438 } 422 if(m_Client) 423 return m_Client->putPacket(data, length, channel, tag, sy, pkt_ctr, dropped_cycles); 439 424 440 425 return RAW1394_ISO_OK; … … 567 552 } 568 553 #endif 569 if (retval == RAW1394_ISO_OK) {570 if (m_dont_exit_iterate_loop) {571 return RAW1394_ISO_OK;572 } else {573 m_dont_exit_iterate_loop = true;574 debugOutput(DEBUG_LEVEL_VERBOSE,575 "(%p) loop exit requested\n",576 this);577 return RAW1394_ISO_DEFER;578 }579 } else {580 554 return retval; 581 }582 555 } 583 556 trunk/libffado/src/libieee1394/IsoHandler.h
r1531 r1731 143 143 bool canIterateClient(); // FIXME: implement with functor 144 144 145 /**146 * @brief request that the handler exits the packet processing loop ASAP147 *148 * The raw1394 lib doesn't provide a means to stop the packet iteration loop149 * except when the iterate callback returns a DEFER value. Calling this function150 * will make the callback return DEFER ASAP.151 */152 void requestIterateLoopExit() {m_dont_exit_iterate_loop = false;};153 /**154 * @brief allow the handler to stay in the packet processing loop155 *156 * This resets the state set by requestIterateLoopExit()157 */158 void allowIterateLoop() {m_dont_exit_iterate_loop = true;};159 160 145 161 146 /** … … 203 188 enum raw1394_iso_speed m_speed; 204 189 unsigned int m_prebuffers; 205 bool m_dont_exit_iterate_loop;206 190 207 191 // the state machine trunk/libffado/src/libieee1394/IsoHandlerManager.cpp
r1550 r1731 256 256 events = POLLIN | POLLPRI; 257 257 no_one_to_poll = false; 258 // if we are going to poll() it, let's ensure259 // it can run until someone wants it to exit260 h->allowIterateLoop();261 258 } 262 259 m_poll_fds_shadow[i].events = events;