~ubuntu-branches/debian/squeeze/nas/squeeze

« back to all changes in this revision

Viewing changes to server/os/iopreader.c

  • Committer: Bazaar Package Importer
  • Author(s): Steve McIntyre
  • Date: 2008-10-08 01:18:19 UTC
  • mfrom: (4.1.7 intrepid)
  • Revision ID: james.westby@ubuntu.com-20081008011819-wmr4h2w0298k8t7z
Tags: 1.9.1-5
* Fix pending l10n issues. Debconf translations:
* Swedish. Closes: #491766 (thanks to brother@bsnet.se)
* Arabic. Closes: #500437 (thanks to Ossama Khayat)
* Basque. Closes: #500533 (thanks to Piarres Beobide)
* Brazilian Portuguese. Closes: #500973 (thanks to Felipe
  Augusto van de Wiel)
* Many thanks again to Christian Perrier for his i18n efforts,
  co-ordinating the above.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
 
15
15
#include "osdep.h"
16
16
 
17
 
#define MAXEVENTQUEUE   32
 
17
#define MAXEVENTQUEUE   32
18
18
 
19
19
capability iopcap;
20
20
 
33
33
void
34
34
InitializeIOPServerReader()
35
35
{
36
 
    char                host[100];
37
 
    errstat             err;
 
36
    char host[100];
 
37
    errstat err;
38
38
 
39
39
    /*
40
40
     * Initialize event queue
48
48
     * Get IOP capability, and enable the server
49
49
     */
50
50
    if (AuServerHostName == NULL)
51
 
        FatalError("No hostname, no screen\n");
 
51
        FatalError("No hostname, no screen\n");
52
52
    sprintf(host, "%s/%s/%s", HOST_DIR, AuServerHostName, DEF_IOPSVRNAME);
53
53
    if ((err = name_lookup(host, &iopcap)) != STD_OK)
54
 
        FatalError("Cannot find IOP server %s: %s\n", host, err_why(err));
 
54
        FatalError("Cannot find IOP server %s: %s\n", host, err_why(err));
55
55
 
56
56
    /*
57
57
     * Enable IOP server
58
58
     */
59
59
    if ((err = iop_enable(&iopcap)) != STD_OK)
60
 
        FatalError("iop_enable failed (%s)\n", err_why(err));
 
60
        FatalError("iop_enable failed (%s)\n", err_why(err));
61
61
 
62
62
    /*
63
63
     * Start IOP reader thread
64
64
     */
65
65
    atexit(IOPCleanUp);
66
66
    if (thread_newthread(IOPServerReader, DEVREADER_STACK, 0, 0) <= 0)
67
 
        FatalError("Cannot start IOP reader thread\n");
 
67
        FatalError("Cannot start IOP reader thread\n");
68
68
}
69
69
 
70
70
/*
77
77
    errstat err;
78
78
 
79
79
    if ((err = iop_disable(&iopcap)) != STD_OK)
80
 
        ErrorF("iop_disable failed (%s)\n", err_why(err));
 
80
        ErrorF("iop_disable failed (%s)\n", err_why(err));
81
81
}
82
82
 
83
83
/*
88
88
static void
89
89
IOPServerReader()
90
90
{
91
 
    IOPEvent            queue[MAXEVENTQUEUE-1];
92
 
    int                 nevents, i;
93
 
    errstat             err;
 
91
    IOPEvent queue[MAXEVENTQUEUE - 1];
 
92
    int nevents, i;
 
93
    errstat err;
94
94
 
95
95
    WaitForInitialization();
96
96
 
97
97
#ifdef XDEBUG
98
 
    if (amDebug) ErrorF("IOPServerReader() running ...\n");
 
98
    if (amDebug)
 
99
        ErrorF("IOPServerReader() running ...\n");
99
100
#endif
100
101
 
101
102
    for (;;) {
102
 
        do {
103
 
            nevents = MAXEVENTQUEUE - 1;
104
 
            err = iop_getevents(&iopcap, queue, &nevents);
105
 
            if (err != STD_OK) {
106
 
                if (err != RPC_FAILURE) {
107
 
                    ErrorF("iop_getevents failed (%s)\n", err_why(err));
108
 
                }
109
 
                nevents = 0;
110
 
            }
111
 
        } while (nevents <= 0);
 
103
        do {
 
104
            nevents = MAXEVENTQUEUE - 1;
 
105
            err = iop_getevents(&iopcap, queue, &nevents);
 
106
            if (err != STD_OK) {
 
107
                if (err != RPC_FAILURE) {
 
108
                    ErrorF("iop_getevents failed (%s)\n", err_why(err));
 
109
                }
 
110
                nevents = 0;
 
111
            }
 
112
        } while (nevents <= 0);
112
113
 
113
 
        /* store event(s) in the global event queue */
114
 
        sema_mdown(&empty, nevents);
115
 
        mu_lock(&lock);
116
 
        for (i = 0; i < nevents; i++) {
117
 
            event_queue[event_qin] = queue[i];
118
 
            event_qin = (event_qin + 1) % MAXEVENTQUEUE;
119
 
        }
120
 
        mu_unlock(&lock);
121
 
        sema_mup(&filled, nevents);
122
 
        WakeUpMainThread();
 
114
        /* store event(s) in the global event queue */
 
115
        sema_mdown(&empty, nevents);
 
116
        mu_lock(&lock);
 
117
        for (i = 0; i < nevents; i++) {
 
118
            event_queue[event_qin] = queue[i];
 
119
            event_qin = (event_qin + 1) % MAXEVENTQUEUE;
 
120
        }
 
121
        mu_unlock(&lock);
 
122
        sema_mup(&filled, nevents);
 
123
        WakeUpMainThread();
123
124
    }
124
125
}
125
126
 
139
140
 */
140
141
int
141
142
AmoebaGetEvents(queue, size)
142
 
    IOPEvent    *queue;
143
 
    int         size;
 
143
IOPEvent *queue;
 
144
int size;
144
145
{
145
 
    int         nevents, i;
 
146
    int nevents, i;
146
147
 
147
 
    if (sema_level(&filled) <= 0) return 0;
 
148
    if (sema_level(&filled) <= 0)
 
149
        return 0;
148
150
    if ((nevents = sema_level(&filled)) > size)
149
 
        nevents = size;
 
151
        nevents = size;
150
152
    sema_mdown(&filled, nevents);
151
153
    mu_lock(&lock);
152
154
    for (i = 0; i < nevents; i++) {
153
 
        queue[i] = event_queue[event_qout];
154
 
        event_qout = (event_qout + 1) % MAXEVENTQUEUE;
 
155
        queue[i] = event_queue[event_qout];
 
156
        event_qout = (event_qout + 1) % MAXEVENTQUEUE;
155
157
    }
156
158
    mu_unlock(&lock);
157
159
    sema_mup(&empty, nevents);
158
160
    return nevents;
159
161
}
160
162
#endif /* AMOEBA */
161