Index: libcfa/src/concurrency/channel.hfa
===================================================================
--- libcfa/src/concurrency/channel.hfa	(revision 5a059463785617a734ec20e395e6f149d89171a0)
+++ libcfa/src/concurrency/channel.hfa	(revision 629c95a09e5a24f7108fc98fcff62c3e3ae6ad16)
@@ -1,7 +1,22 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2021 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// channel.hfa -- LIBCFATHREAD
+// Runtime locks that used with the runtime thread system.
+//
+// Author           : Colby Alexander Parsons
+// Created On       : Thu Jan 21 19:46:50 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
 #pragma once
 
 #include <locks.hfa>
 #include <list.hfa>
-#include <mutex_stmt.hfa>
 #include "select.hfa"
 
@@ -44,6 +59,6 @@
     T * buffer;
     dlist( select_node ) prods, cons; // lists of blocked threads
-    go_mutex mutex_lock;            // MX lock
-    bool closed;                    // indicates channel close/open
+    go_mutex mutex_lock;              // MX lock
+    bool closed;                      // indicates channel close/open
     #ifdef CHAN_STATS
     size_t blocks, operations;      // counts total ops and ops resulting in a blocked thd
@@ -308,5 +323,5 @@
 ///////////////////////////////////////////////////////////////////////////////////////////
 static inline bool unregister_chan( channel(T) & chan, select_node & node ) with(chan) {
-    // if ( !node`isListed && !node.park_counter ) return false; // handle special OR case
+    // if ( !node`isListed && !node.park_counter ) return false; // handle special OR case C_TODO: try adding this back
     lock( mutex_lock );
     if ( node`isListed ) { // op wasn't performed
@@ -360,4 +375,5 @@
             if ( __handle_waituntil_OR( prods ) ) {
                 __prods_handoff( chan, ret );
+                __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node
                 unlock( mutex_lock );
                 return true;
@@ -449,4 +465,5 @@
             if ( __handle_waituntil_OR( cons ) ) {
                 __cons_handoff( chan, elem );
+                __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node
                 unlock( mutex_lock );
                 return true;
@@ -504,7 +521,5 @@
 }
 
-
 } // forall( T )
 
 
-
