Annotation of xinu/sys/TEST/test.c.mesgring, revision 1.1

1.1     ! root        1: /* test.c - main */
        !             2: 
        !             3: #include <conf.h>
        !             4: #include <kernel.h>
        !             5: 
        !             6: #define        CIRCUIT 1000
        !             7: 
        !             8: /*------------------------------------------------------------------------
        !             9:  *  main  --  current test routines
        !            10:  *------------------------------------------------------------------------
        !            11:  */
        !            12: main()
        !            13: {
        !            14:        int ctr, succpid;
        !            15:        int ringnode(), startnode();
        !            16: 
        !            17:        succpid = getpid();
        !            18:        for (ctr=0; ctr<NPROC-2; ctr++) {
        !            19:                succpid = create (ringnode, 500, 19, "ringnode", 1, succpid);
        !            20:                if (succpid != SYSERR)
        !            21:                        resume (succpid);
        !            22:                else{
        !            23:                        kprintf("error creating ring node\n");
        !            24:                        break;
        !            25:                        }
        !            26:                }
        !            27:        chprio (getpid(), 19);
        !            28:        startnode(succpid);
        !            29: }
        !            30: 
        !            31: ringnode(succpid)
        !            32: int succpid;
        !            33: {
        !            34:        int ctr, inval, predpid;
        !            35: 
        !            36:        /* send messages around ring CIRCUIT times */
        !            37:        for (ctr = 0; ctr < CIRCUIT; ctr++) {
        !            38:                inval = receive();
        !            39:                while (send(succpid, inval) == SYSERR) {
        !            40:                        kprintf ("error sending\n");
        !            41:                        sleep(1);
        !            42:                        }
        !            43:                }
        !            44:        /* now each node tells its successor its pid */
        !            45:        while (send(succpid, getpid()) == SYSERR)  {
        !            46:                kprintf("error sending\n");
        !            47:                sleep(1);
        !            48:                }
        !            49:        predpid = receive();
        !            50:        /* switch directions and send messages around ring CIRCUIT times */
        !            51:        for (ctr = 0; ctr < CIRCUIT; ctr++) {
        !            52:                inval = receive();
        !            53:                while (send(predpid, inval) == SYSERR)  {
        !            54:                        kprintf("error sending\n");
        !            55:                        sleep(1);
        !            56:                        }
        !            57:                }
        !            58: }
        !            59: 
        !            60: startnode(succpid)
        !            61: int succpid;
        !            62: {
        !            63:        int ctr, inval, predpid;
        !            64: 
        !            65:        /* send messages through ring CIRCUIT times */
        !            66:        kprintf("sending %d messages around ring\n", CIRCUIT);
        !            67:        for (ctr = 0; ctr < CIRCUIT; ctr++) {
        !            68:                while (send(succpid, ctr) == SYSERR) {
        !            69:                        kprintf ("error sending\n");
        !            70:                        sleep(1);
        !            71:                        }
        !            72:                if ((inval = receive()) != ctr)
        !            73:                        kprintf ("bad message\n");
        !            74:                }
        !            75:        kprintf("reversing ring direction\n");
        !            76:        /* now each node tells its successor its pid */
        !            77:        while (send(succpid, getpid()) == SYSERR)  {
        !            78:                kprintf("error sending\n");
        !            79:                sleep(1);
        !            80:                }
        !            81:        predpid = receive(predpid);
        !            82:        /* switch directions and send messages around ring CIRCUIT times */
        !            83:        kprintf("sending %d messages around ring in reversed direction\n", CIRCUIT);
        !            84:        for (ctr = 0; ctr < CIRCUIT; ctr++) {
        !            85:                while (send(predpid, ctr) == SYSERR)  {
        !            86:                        kprintf("error sending\n");
        !            87:                        sleep(1);
        !            88:                        }
        !            89:                if ((inval = receive()) != ctr)
        !            90:                        kprintf("bad message\n");
        !            91:        }
        !            92:        kprintf("done with message passing test\n");
        !            93: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.