Index: src/libcfa/concurrency/coroutine
===================================================================
--- src/libcfa/concurrency/coroutine	(revision de6319f37ab741ed2ba4232a93ee62c240717bcd)
+++ src/libcfa/concurrency/coroutine	(revision 0873d22efcc097d413cbc87404bc6feb3b541bfb)
@@ -72,5 +72,10 @@
 // Suspend implementation inlined for performance
 static inline void suspend() {
-	coroutine_desc * src = TL_GET( this_coroutine );			// optimization
+	// optimization : read TLS once and reuse it
+	// Safety note: this is preemption safe since if
+	// preemption occurs after this line, the pointer
+	// will also migrate which means this value will
+	// stay in syn with the TLS
+	coroutine_desc * src = TL_GET( this_coroutine );
 
 	assertf( src->last != 0,
@@ -89,5 +94,10 @@
 forall(dtype T | is_coroutine(T))
 static inline void resume(T & cor) {
-	coroutine_desc * src = TL_GET( this_coroutine );			// optimization
+	// optimization : read TLS once and reuse it
+	// Safety note: this is preemption safe since if
+	// preemption occurs after this line, the pointer
+	// will also migrate which means this value will
+	// stay in syn with the TLS
+	coroutine_desc * src = TL_GET( this_coroutine );
 	coroutine_desc * dst = get_coroutine(cor);
 
@@ -107,5 +117,5 @@
 		dst->last = src;
 		dst->starter = dst->starter ? dst->starter : src;
-	} // if
+	}
 
 	// always done for performance testing
@@ -114,5 +124,10 @@
 
 static inline void resume(coroutine_desc * dst) {
-	coroutine_desc * src = TL_GET( this_coroutine );			// optimization
+	// optimization : read TLS once and reuse it
+	// Safety note: this is preemption safe since if
+	// preemption occurs after this line, the pointer
+	// will also migrate which means this value will
+	// stay in syn with the TLS
+	coroutine_desc * src = TL_GET( this_coroutine );
 
 	// not resuming self ?
@@ -125,5 +140,5 @@
 		// set last resumer
 		dst->last = src;
-	} // if
+	}
 
 	// always done for performance testing
