aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2006-01-27 05:51:54 +0000
committerrsc <devnull@localhost>2006-01-27 05:51:54 +0000
commitc54b8b69ede9d92e802baa1163d9cd734b034fb4 (patch)
tree7b36e7792b73a8ed5c8f2373a346efa5b1735d5f
parentbc5d57712754818a2320a385afbf1c0c9558a4b3 (diff)
downloadplan9port-c54b8b69ede9d92e802baa1163d9cd734b034fb4.tar.gz
plan9port-c54b8b69ede9d92e802baa1163d9cd734b034fb4.tar.bz2
plan9port-c54b8b69ede9d92e802baa1163d9cd734b034fb4.zip
bsd
-rw-r--r--include/libc.h11
-rw-r--r--include/u.h1
-rw-r--r--src/lib9/sleep.c10
-rw-r--r--src/libthread/386-ucontext.h2
-rw-r--r--src/libthread/BSD.c2
-rw-r--r--src/libthread/OpenBSD-386-asm.s3
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 <u.h>
#define NOPLAN9DEFINES
+#include <sys/param.h>
#include <sys/time.h>
#include <sched.h>
#include <libc.h>
+#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))
+