Changes in / [49caf644:c635047]
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/channel.hfa
r49caf644 rc635047 326 326 return retval; 327 327 } 328 static inline void remove( channel(T) & chan ) { T elem = (T)remove( chan ); }329 330 328 331 329 /////////////////////////////////////////////////////////////////////////////////////////// … … 463 461 } 464 462 465 // type used by select statement to capture a chan read as the selected operation that doesn't have a param to read to466 struct chan_read_no_ret {467 T ret;468 chan_read( T ) cr;469 };470 __CFA_SELECT_GET_TYPE( chan_read_no_ret(T) );471 472 static inline void ?{}( chan_read_no_ret(T) & this, channel(T) & chan ) {473 this.cr{ chan, this.ret };474 }475 static inline chan_read_no_ret(T) remove( channel(T) & chan ) { chan_read_no_ret(T) cr{ chan }; return cr; }476 static inline bool register_select( chan_read_no_ret(T) & this, select_node & node ) { return register_select( this.cr, node ); }477 static inline bool unregister_select( chan_read_no_ret(T) & this, select_node & node ) { return unregister_select( this.cr, node ); }478 static inline bool on_selected( chan_read_no_ret(T) & this, select_node & node ) { return on_selected( this.cr, node ); }479 480 463 // type used by select statement to capture a chan write as the selected operation 481 464 struct chan_write { -
tests/concurrency/waituntil/repeat_close.cfa
r49caf644 rc635047 31 31 try { 32 32 for( ;; ) { 33 waituntil( remove(F)) { F_removes++; }34 or waituntil( remove(E)) { E_removes++; }35 or waituntil( remove(D)) { D_removes++; }36 or waituntil( remove(C)) { C_removes++; }37 or waituntil( remove(B)) { B_removes++; }38 or waituntil( remove(A)) { A_removes++; }33 waituntil( in << F ) { F_removes++; } 34 or waituntil( in << E ) { E_removes++; } 35 or waituntil( in << D ) { D_removes++; } 36 or waituntil( in << C ) { C_removes++; } 37 or waituntil( in << B ) { B_removes++; } 38 or waituntil( in << A ) { A_removes++; } 39 39 } 40 40 } catchResume ( channel_closed * e ) { } // continue to remove until would block
Note:
See TracChangeset
for help on using the changeset viewer.