Index: kernel/generic/include/context.h
===================================================================
--- kernel/generic/include/context.h	(revision 4c467ee98b2e9b9f3c494c80d9b943cee683aa1f)
+++ kernel/generic/include/context.h	(revision ec8b0dac0a89d85fb1256e7e6a702141cc630506)
@@ -46,5 +46,5 @@
 #endif /* context_set */
 
-extern int context_save_arch(context_t *c);
+extern int context_save_arch(context_t *c) __attribute__ ((returns_twice));
 extern void context_restore_arch(context_t *c) __attribute__ ((noreturn));
 
Index: uspace/lib/libc/generic/fibril.c
===================================================================
--- uspace/lib/libc/generic/fibril.c	(revision 4c467ee98b2e9b9f3c494c80d9b943cee683aa1f)
+++ uspace/lib/libc/generic/fibril.c	(revision ec8b0dac0a89d85fb1256e7e6a702141cc630506)
@@ -166,10 +166,4 @@
 		/* Save current state */
 		if (!context_save(&srcf->ctx)) {
-			/*
-			 * Make sure to reload srcf with the current fibril
-			 * address. Its value may be invalid after
-			 * contex_restore() due to e.g. register recycling.
-			 */
-			srcf = __tcb_get()->fibril_data;
 			if (serialization_count)
 				srcf->flags &= ~FIBRIL_SERIALIZED;
Index: uspace/lib/libc/include/fibril.h
===================================================================
--- uspace/lib/libc/include/fibril.h	(revision 4c467ee98b2e9b9f3c494c80d9b943cee683aa1f)
+++ uspace/lib/libc/include/fibril.h	(revision ec8b0dac0a89d85fb1256e7e6a702141cc630506)
@@ -76,5 +76,5 @@
 #define fibril_local __thread
 
-extern int context_save(context_t *c);
+extern int context_save(context_t *c) __attribute__ ((returns_twice));
 extern void context_restore(context_t *c) __attribute__ ((noreturn));
 
