summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--emu/port/devfs-posix.c37
-rw-r--r--emu/port/kproc-pthreads.c11
-rw-r--r--include/version.h2
-rw-r--r--man/10/newchan4
5 files changed, 26 insertions, 31 deletions
diff --git a/CHANGES b/CHANGES
index da639314..51053d9f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+20110619
+ emu/port/devfs-posix.c: put major/minor st_dev into path without mapping (with luck)
+ emu/port/kproc-pthreads.c: ensure pthread stack is at least PTHREAD_STACK_MIN (plus slop)
20110526
change osyield in Windows to use SwitchToThread instead of sleep(0) [e-mail list]
20110525
diff --git a/emu/port/devfs-posix.c b/emu/port/devfs-posix.c
index c4aa3d9a..763694d1 100644
--- a/emu/port/devfs-posix.c
+++ b/emu/port/devfs-posix.c
@@ -632,45 +632,28 @@ fswstat(Chan *c, uchar *buf, int nb)
return nb;
}
-#define QDEVBITS 4 /* 16 devices should be plenty */
-#define MAXDEV (1<<QDEVBITS)
-#define QDEVSHIFT (64-QDEVBITS)
-#define QINOMASK (((uvlong)1<<QDEVSHIFT)-1)
-#define QPATH(d,i) (((uvlong)(d)<<QDEVSHIFT)|((uvlong)(i)&QINOMASK))
-
static Qid
fsqid(struct stat *st)
{
Qid q;
- ulong dev;
- int idev;
- static int nqdev = 0;
- static ulong qdev[MAXDEV];
- static Lock l;
+ u16int dev;
q.type = QTFILE;
if(S_ISDIR(st->st_mode))
q.type = QTDIR;
- dev = st->st_dev;
- lock(&l);
- for(idev = 0; idev < nqdev; idev++)
- if(qdev[idev] == dev)
- break;
- if(idev == nqdev) {
- if(nqdev == MAXDEV) {
- unlock(&l);
- error("too many devices");
+ dev = (u16int)st->st_dev;
+ if(dev & 0x8000){
+ static int aware;
+ if(aware==0){
+ aware = 1;
+ fprint(2, "fs: fsqid: top-bit dev: %#4.4ux\n", dev);
}
- qdev[nqdev++] = dev;
+ dev ^= 0x8080;
}
- unlock(&l);
-
- if(0) /* we'll just let it be masked off */
- if((uvlong)st->st_ino & ~QINOMASK)
- error("inode number too large");
- q.path = QPATH(idev, st->st_ino);
+ q.path = (uvlong)dev<<48;
+ q.path ^= st->st_ino;
q.vers = st->st_mtime;
return q;
diff --git a/emu/port/kproc-pthreads.c b/emu/port/kproc-pthreads.c
index b48a00bb..32053794 100644
--- a/emu/port/kproc-pthreads.c
+++ b/emu/port/kproc-pthreads.c
@@ -8,6 +8,7 @@
#include <unistd.h>
#include <signal.h>
#include <pthread.h>
+#include <limits.h>
#include <errno.h>
#include <semaphore.h>
@@ -81,6 +82,14 @@ tramp(void *arg)
os->self = pthread_self();
if(pthread_setspecific(prdakey, arg))
panic("set specific data failed in tramp\n");
+ if(0){
+ pthread_attr_t attr;
+ memset(&attr, 0, sizeof(attr));
+ pthread_getattr_np(pthread_self(), &attr);
+ size_t s;
+ pthread_attr_getstacksize(&attr, &s);
+ print("stack size = %d\n", s);
+ }
p->func(p->arg);
pexit("{Tramp}", 0);
return nil;
@@ -150,7 +159,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
if(flags & KPX11)
pthread_attr_setstacksize(&attr, 512*1024); /* could be a parameter */
else if(KSTACK > 0)
- pthread_attr_setstacksize(&attr, KSTACK);
+ pthread_attr_setstacksize(&attr, (KSTACK < PTHREAD_STACK_MIN? PTHREAD_STACK_MIN: KSTACK)+1024);
pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if(pthread_create(&thread, &attr, tramp, p))
diff --git a/include/version.h b/include/version.h
index 8c476e75..7582f39f 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1 +1 @@
-#define VERSION "Fourth Edition (20110526)"
+#define VERSION "Fourth Edition (20110619)"
diff --git a/man/10/newchan b/man/10/newchan
index 69346d46..155572ea 100644
--- a/man/10/newchan
+++ b/man/10/newchan
@@ -174,9 +174,9 @@ Access file for information, as in the stat command or call.
.TP
.B Atodir
Access file as directory (the
-.B CHDIR
+.B QTDIR
bit of its
-.B qid.path
+.B qid.type
must be set).
.TP
.B Aopen