tuse new thread library - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b20f06ab9cc0058a7e5b5e434d412db19ea7e2b8
 (DIR) parent d9f3e89e5efc95811a7d56aa8ae107aad3e3e286
 (HTM) Author: rsc <devnull@localhost>
       Date:   Sun, 26 Dec 2004 23:24:32 +0000
       
       use new thread library
       
       Diffstat:
         M src/libdraw/init.c                  |       4 ++--
         M src/libdraw/keyboard.c              |       1 +
         M src/libdraw/mouse.c                 |       2 ++
         M src/libdraw/x11-draw.c              |       8 ++++----
         M src/libdraw/x11-keyboard.c          |       8 +++-----
         M src/libdraw/x11-mouse.c             |      14 ++++++++------
       
       6 files changed, 20 insertions(+), 17 deletions(-)
       ---
 (DIR) diff --git a/src/libdraw/init.c b/src/libdraw/init.c
       t@@ -10,7 +10,7 @@ int        _drawdebug;
        static char deffontname[] = "*default*";
        Screen        *_screen;
        
       -int                debuglockdisplay = 0;
       +int                debuglockdisplay = 1;
        
        static void
        drawshutdown(void)
       t@@ -34,6 +34,7 @@ initdraw(void (*error)(Display*, char*), char *fontname, char *label)
                if(display == nil)
                        return -1;
        
       +        lockdisplay(display);
                display->image = display->screenimage;
                screen = display->screenimage;
        
       t@@ -113,7 +114,6 @@ closedisplay(Display *disp)
                free(disp->windir);
                freeimage(disp->white);
                freeimage(disp->black);
       -        qunlock(&disp->qlock);
                free(disp);
        }
        
 (DIR) diff --git a/src/libdraw/keyboard.c b/src/libdraw/keyboard.c
       t@@ -91,6 +91,7 @@ Error2:
                }
                free(t);
                kc->c = chancreate(sizeof(Rune), 20);
       +        chansetname(kc->c, "kbdc");
                proccreate(_ioproc, kc, 4096);
                return kc;
        }
 (DIR) diff --git a/src/libdraw/mouse.c b/src/libdraw/mouse.c
       t@@ -118,7 +118,9 @@ initmouse(char *file, Image *i)
                free(t);
                mc->image = i;
                mc->c = chancreate(sizeof(Mouse), 0);
       +        chansetname(mc->c, "mousec");
                mc->resizec = chancreate(sizeof(int), 2);
       +        chansetname(mc->resizec, "resizec");
                proccreate(_ioproc, mc, 4096);
                return mc;
        }
 (DIR) diff --git a/src/libdraw/x11-draw.c b/src/libdraw/x11-draw.c
       t@@ -23,11 +23,11 @@ memimagedraw(Memimage *dst, Rectangle r, Memimage *src, Point sp,
        
                /* only fetch dst data if we need it */
                if((par->state&(Simplemask|Fullmask)) != (Simplemask|Fullmask))
       -                _xgetxdata(dst, par->r);
       +                _xgetxdata(par->dst, par->r);
        
                /* always fetch source and mask */
       -        _xgetxdata(src, par->sr);
       -        _xgetxdata(mask, par->mr);
       +        _xgetxdata(par->src, par->sr);
       +        _xgetxdata(par->mask, par->mr);
        
                /* now can run memimagedraw on the in-memory bits */
                _memimagedraw(par);
       t@@ -36,7 +36,7 @@ memimagedraw(Memimage *dst, Rectangle r, Memimage *src, Point sp,
                        return;
        
                /* put bits back on x server */
       -        _xputxdata(dst, par->r);
       +        _xputxdata(par->dst, par->r);
        }
        
        static int
 (DIR) diff --git a/src/libdraw/x11-keyboard.c b/src/libdraw/x11-keyboard.c
       t@@ -45,9 +45,7 @@ _ioproc(void *arg)
                fd = XConnectionNumber(_x.kbdcon);
                XSelectInput(_x.kbdcon, _x.drawable, KeyPressMask);
                for(;;){
       -                while(XCheckWindowEvent(_x.kbdcon, _x.drawable, KeyPressMask, &xevent) == False){
       -                        threadfdwait(fd, 'r');
       -                }
       +                XWindowEvent(_x.kbdcon, _x.drawable, KeyPressMask, &xevent);
                        switch(xevent.type){
                        case KeyPress:
                                i = _xtoplan9kbd(&xevent);
       t@@ -69,12 +67,12 @@ initkeyboard(char *file)
        {
                Keyboardctl *kc;
        
       -        threadfdwaitsetup();
                kc = mallocz(sizeof(Keyboardctl), 1);
                if(kc == nil)
                        return nil;
                kc->c = chancreate(sizeof(Rune), 20);
       -        threadcreate(_ioproc, kc, 32768);
       +        chansetname(kc->c, "kbdc");
       +        proccreate(_ioproc, kc, 32768);
                return kc;
        }
        
 (DIR) diff --git a/src/libdraw/x11-mouse.c b/src/libdraw/x11-mouse.c
       t@@ -50,7 +50,7 @@ static
        void
        _ioproc(void *arg)
        {
       -        int fd, one;
       +        int fd, one, buttons;
                Atom a;
                ulong mask;
                Mouse m;
       t@@ -65,9 +65,8 @@ _ioproc(void *arg)
                mask = MouseMask|ExposureMask|StructureNotifyMask;
                XSelectInput(_x.mousecon, _x.drawable, mask);
                fd = XConnectionNumber(_x.mousecon);
       +        buttons = 0;
                for(;;){
       -                while(XPending(_x.mousecon) == False)
       -                        threadfdwait(fd, 'r');
                        XNextEvent(_x.mousecon, &xevent);
                        switch(xevent.type){
                        case Expose:
       t@@ -94,14 +93,16 @@ _ioproc(void *arg)
                        case ButtonRelease:
                        case MotionNotify:
                                /* If the motion notifications are backing up, skip over some. */
       -                        if(xevent.type == MotionNotify){
       +                        if(0 && xevent.type == MotionNotify){
                                        while(XCheckWindowEvent(_x.mousecon, _x.drawable, MouseMask, &xevent)){
                                                if(xevent.type != MotionNotify)
                                                        break;
                                        }
                                }
       +                        m.buttons = buttons;
                                if(_xtoplan9mouse(_x.mousecon, &xevent, &m) < 0)
                                        continue;
       +                        buttons = m.buttons;
                                send(mc->c, &m);
                                /*
                                 * mc->Mouse is updated after send so it doesn't have wrong value if we block during send.
       t@@ -133,13 +134,14 @@ initmouse(char *file, Image *i)
        {
                Mousectl *mc;
        
       -        threadfdwaitsetup();
                mc = mallocz(sizeof(Mousectl), 1);
                if(i)
                        mc->display = i->display;
                mc->c = chancreate(sizeof(Mouse), 0);
       +        chansetname(mc->c, "mousec");
                mc->resizec = chancreate(sizeof(int), 2);
       -        threadcreate(_ioproc, mc, 32768);
       +        chansetname(mc->resizec, "resizec");
       +        proccreate(_ioproc, mc, 32768);
                return mc;
        }