source: benchmark/io/http/worker.hfa @ 329e26a

pthread-emulationqualifiedEnum
Last change on this file since 329e26a was 329e26a, checked in by Thierry Delisle <tdelisle@…>, 6 months ago

Re-instated the isolate/multi-cluster option.

  • Property mode set to 100644
File size: 1.3 KB
Line 
1#pragma once
2
3#include <iofwd.hfa>
4#include <queueLockFree.hfa>
5#include <thread.hfa>
6
7extern "C" {
8        #include <sys/socket.h>
9}
10
11#include "printer.hfa"
12
13//=============================================================================================
14// Worker Thread
15//=============================================================================================
16
17struct connection {
18        int pipe[2];
19        struct {
20                sendfile_stats_t sendfile;
21        } stats;
22};
23
24static inline void ?{}( connection & this ) {
25        this.pipe[0] = -1;
26        this.pipe[1] = -1;
27}
28
29thread AcceptWorker {
30        connection conn;
31        int sockfd;
32        struct sockaddr * addr;
33        socklen_t * addrlen;
34        int flags;
35        volatile bool done;
36};
37void ?{}( AcceptWorker & this);
38void main( AcceptWorker & );
39
40
41struct PendingRead {
42        PendingRead * volatile next;
43        io_future_t f;
44        struct {
45                void * buf;
46                size_t len;
47        } in;
48        struct {
49                volatile int fd;
50        } out;
51};
52
53static inline PendingRead * volatile & ?`next ( PendingRead * node ) {
54        return node->next;
55}
56
57thread ChannelWorker {
58        connection conn;
59        volatile bool done;
60        mpsc_queue(PendingRead) * queue;
61};
62void ?{}( ChannelWorker & );
63void main( ChannelWorker & );
64
65thread Acceptor {
66        mpsc_queue(PendingRead) * queue;
67        int sockfd;
68        struct sockaddr * addr;
69        socklen_t * addrlen;
70        int flags;
71        volatile bool done;
72        acceptor_stats_t stats;
73};
74void ?{}( Acceptor &, int cli );
75void main( Acceptor & );
Note: See TracBrowser for help on using the repository browser.