From c54b8b69ede9d92e802baa1163d9cd734b034fb4 Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 27 Jan 2006 05:51:54 +0000 Subject: bsd --- include/libc.h | 11 ----------- include/u.h | 1 + src/lib9/sleep.c | 10 ++++++++++ src/libthread/386-ucontext.h | 2 ++ src/libthread/BSD.c | 2 +- src/libthread/OpenBSD-386-asm.s | 3 ++- 6 files changed, 16 insertions(+), 13 deletions(-) diff --git a/include/libc.h b/include/libc.h index 1f867421..10000b57 100644 --- a/include/libc.h +++ b/include/libc.h @@ -904,17 +904,6 @@ extern int post9pservice(int, char*); # endif #endif -/* this really shouldn't be here */ -#if defined(__OpenBSD__) || (defined(__NetBSD__) && !defined(sched_yield)) -#define sched_yield() \ - do { \ - struct timespec ts; \ - ts.tv_sec = 0; \ - ts.tv_nsec = 10; \ - nanosleep(&ts, NULL); \ - } while(0) -#endif - /* command line */ extern char *argv0; extern void __fixargv0(void); diff --git a/include/u.h b/include/u.h index c3f0081f..466f3eab 100644 --- a/include/u.h +++ b/include/u.h @@ -154,6 +154,7 @@ typedef int32_t s32int; * Gcc is too smart for its own good. */ #if defined(__GNUC__) +# undef strcmp /* causes way too many warnings */ # if __GNUC__ >= 4 || (__GNUC__==3 && !defined(__APPLE_CC__)) # undef AUTOLIB # define AUTOLIB(x) int __p9l_autolib_ ## x __attribute__ ((weak)); diff --git a/src/lib9/sleep.c b/src/lib9/sleep.c index 5da602eb..7a5c79fd 100644 --- a/src/lib9/sleep.c +++ b/src/lib9/sleep.c @@ -1,9 +1,19 @@ #include #define NOPLAN9DEFINES +#include #include #include #include +#if defined(__NetBSD__) || (defined(__OpenBSD__) && OpenBSD <= 200511) +# define sched_yield() \ +# do{ struct timespec ts; \ +# ts.tv_sec = 0; \ +# ts.tv_nsec = 10; \ +# nanosleep(&ts, 0); \ +# }while(0) +#endif + int p9sleep(long milli) { diff --git a/src/libthread/386-ucontext.h b/src/libthread/386-ucontext.h index 57fd1bd8..00af62aa 100644 --- a/src/libthread/386-ucontext.h +++ b/src/libthread/386-ucontext.h @@ -5,6 +5,8 @@ typedef struct ucontext ucontext_t; extern int swapcontext(ucontext_t*, ucontext_t*); extern void makecontext(ucontext_t*, void(*)(), int, ...); +extern int getmcontext(mcontext_t*); +extern void setmcontext(mcontetx_t*); /*- * Copyright (c) 1999 Marcel Moolenaar diff --git a/src/libthread/BSD.c b/src/libthread/BSD.c index fdbc712a..b9e8888e 100644 --- a/src/libthread/BSD.c +++ b/src/libthread/BSD.c @@ -33,7 +33,7 @@ _threadlock(Lock *l, int block, ulong pc) for(i=0; i<1000; i++){ if(!_tas(&l->held)) return 1; - sched_yield(); + sleep(0); } /* increasingly slow */ for(i=0; i<10; i++){ diff --git a/src/libthread/OpenBSD-386-asm.s b/src/libthread/OpenBSD-386-asm.s index 7ffb413c..1a59436f 100644 --- a/src/libthread/OpenBSD-386-asm.s +++ b/src/libthread/OpenBSD-386-asm.s @@ -96,4 +96,5 @@ ENTRY(rfork_thread) movl %ebp, %esp popl %ebp PIC_PROLOGUE - jmp PIC_PLT(_C_LABEL(__cerror)) \ No newline at end of file + jmp PIC_PLT(_C_LABEL(__cerror)) + -- cgit v1.2.3