summaryrefslogtreecommitdiff
path: root/libco/ucontext.c
diff options
context:
space:
mode:
authorAutechre2021-03-09 20:31:50 +0100
committerGitHub2021-03-09 20:31:50 +0100
commit45c8ef0a0bdf0557ab9c1153b5a6e77298cca34a (patch)
tree45b66118646d122a395cfecf2d740bed854c4e45 /libco/ucontext.c
parent6a8aa84200eb92a7f3f1b4befb0630d95ad59b8e (diff)
parent0522d9a4f535a61953da64518097fc7f64d7120c (diff)
downloadpicogpsp-45c8ef0a0bdf0557ab9c1153b5a6e77298cca34a.tar.gz
picogpsp-45c8ef0a0bdf0557ab9c1153b5a6e77298cca34a.tar.bz2
picogpsp-45c8ef0a0bdf0557ab9c1153b5a6e77298cca34a.zip
Merge pull request #101 from davidgfnet/master
Remove libco
Diffstat (limited to 'libco/ucontext.c')
-rw-r--r--libco/ucontext.c81
1 files changed, 0 insertions, 81 deletions
diff --git a/libco/ucontext.c b/libco/ucontext.c
deleted file mode 100644
index 3e21816..0000000
--- a/libco/ucontext.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- libco.ucontext (2008-01-28)
- author: Nach
- license: public domain
-*/
-
-/*
- * WARNING: the overhead of POSIX ucontext is very high,
- * assembly versions of libco or libco_sjlj should be much faster
- *
- * This library only exists for two reasons:
- * 1 - as an initial test for the viability of a ucontext implementation
- * 2 - to demonstrate the power and speed of libco over existing implementations,
- * such as pth (which defaults to wrapping ucontext on unix targets)
- *
- * Use this library only as a *last resort*
- */
-
-#define LIBCO_C
-#include <libco.h>
-#include <stdlib.h>
-#include <ucontext.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-static thread_local ucontext_t co_primary;
-static thread_local ucontext_t *co_running = 0;
-
-cothread_t co_active(void)
-{
- if (!co_running)
- co_running = &co_primary;
- return (cothread_t)co_running;
-}
-
-cothread_t co_create(unsigned int heapsize, void (*coentry)(void))
-{
- if (!co_running)
- co_running = &co_primary;
- ucontext_t *thread = (ucontext_t*)malloc(sizeof(ucontext_t));
-
- if(thread)
- {
- if((!getcontext(thread) && !(thread->uc_stack.ss_sp = 0)) && (thread->uc_stack.ss_sp = malloc(heapsize)))
- {
- thread->uc_link = co_running;
- thread->uc_stack.ss_size = heapsize;
- makecontext(thread, coentry, 0);
- }
- else
- {
- co_delete((cothread_t)thread);
- thread = 0;
- }
- }
- return (cothread_t)thread;
-}
-
-void co_delete(cothread_t cothread)
-{
- if (!cothread)
- return;
-
- if(((ucontext_t*)cothread)->uc_stack.ss_sp)
- free(((ucontext_t*)cothread)->uc_stack.ss_sp);
- free(cothread);
-}
-
-void co_switch(cothread_t cothread)
-{
- ucontext_t *old_thread = co_running;
-
- co_running = (ucontext_t*)cothread;
- swapcontext(old_thread, co_running);
-}
-
-#ifdef __cplusplus
-}
-#endif