author | Tero Marttila <terom@fixme.fi> |
Fri, 29 Aug 2008 23:31:17 +0300 | |
changeset 48 | 1c67f512779b |
parent 26 | 6d615203d963 |
permissions | -rw-r--r-- |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include <stdio.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#include <sys/types.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
#include <arpa/inet.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include <stdlib.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
#include <signal.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
#include <string.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
#include <unistd.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
9 |
#include <assert.h> |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
10 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
11 |
#include <event2/event.h> |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
12 |
#include <event2/event_struct.h> |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
13 |
#include <event2/event_compat.h> |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
14 |
#include <event2/bufferevent.h> |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
15 |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
#include "common.h" |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
17 |
#include "socket.h" |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
#include "render.h" |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
19 |
#include "render_struct.h" |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
20 |
#include "render_net.h" |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
21 |
#include "render_thread.h" |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
22 |
#include "render_thread_struct.h" |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
void sigpipe_ignore () { |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
struct sigaction sigpipe_action; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
memset(&sigpipe_action, 0, sizeof(sigpipe_action)); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
sigpipe_action.sa_handler = SIG_IGN; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
if (sigaction(SIGPIPE, &sigpipe_action, NULL)) |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
perr_exit("sigaction"); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
24 | 34 |
void log_null (int severity, const char *msg) { |
35 |
// ignore |
|
36 |
} |
|
37 |
||
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
38 |
/* |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
39 |
* State needed to handle a client |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
40 |
*/ |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
41 |
struct client_info { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
42 |
// the client socket |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
43 |
evutil_socket_t socket; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
45 |
// the read-a-command buffer |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
46 |
struct bufferevent *bufev; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
48 |
// the write-a-mandelbrot stream |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
49 |
FILE *out_stream; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
50 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
51 |
// the render_thread op |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
52 |
// thread_info.is_active is useful |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
53 |
struct render_thread thread_info; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
54 |
}; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
55 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
56 |
static void client_free (struct client_info *ctx) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
57 |
// free the read-a-command buffer |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
58 |
if (ctx->bufev) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
59 |
bufferevent_free(ctx->bufev); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
60 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
61 |
// cancel the render thread if needed |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
62 |
if (ctx->thread_info.is_active) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
63 |
render_thread_cancel(&ctx->thread_info); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
64 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
65 |
// deinit it in any case |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
66 |
render_thread_deinit(&ctx->thread_info); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
67 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
68 |
// close the write-a-mandelbrot stream, or just the socket |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
69 |
if (ctx->out_stream) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
70 |
if (fclose(ctx->out_stream)) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
71 |
PWARNING("fclose"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
72 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
73 |
} else if (ctx->socket != -1) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
74 |
if (close(ctx->socket)) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
75 |
PWARNING("close"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
76 |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
79 |
// free the client info |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
80 |
free(ctx); |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
|
24 | 83 |
static void handle_render_done (struct render_thread *thread_info, int err, void *arg) { |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
84 |
struct client_info *ctx = arg; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
|
24 | 86 |
#if INFO_ENABLED |
87 |
INFO("client [%p]: %s", ctx, err ? "failed" : "done"); |
|
88 |
#endif |
|
89 |
||
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
90 |
// just free it, it takes care of closing it as well |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
91 |
client_free(ctx); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
92 |
} |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
93 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
94 |
static int handle_render_cmd (struct client_info *ctx, struct render_cmd *cmd) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
95 |
// the render ctx... |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
96 |
struct render render_info; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
97 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
98 |
// open it as a normal FILE* |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
99 |
if (!(ctx->out_stream = fdopen(ctx->socket, "w"))) |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
100 |
ERROR("fdopen"); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
101 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
102 |
#if INFO_ENABLED |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
103 |
INFO("client [%p]: render [%ux%u] (%f, %f) -> (%f, %f)", ctx, cmd->img_w, cmd->img_h, cmd->x1, cmd->y1, cmd->x2, cmd->y2); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
104 |
#endif |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
105 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
106 |
// set up the render_info |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
107 |
if ( |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
108 |
render_init(&render_info) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
109 |
|| render_set_mode(&render_info, cmd->mode) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
110 |
|| render_set_size(&render_info, cmd->img_w, cmd->img_h) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
111 |
|| render_region_raw(&render_info, cmd->x1, cmd->y1, cmd->x2, cmd->y2) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
112 |
|| render_io_stream(&render_info, ctx->out_stream) |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
113 |
) |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
114 |
ERROR("render_*"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
115 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
116 |
// start the render thread |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
117 |
if (render_thread_init(&ctx->thread_info, &render_info, &handle_render_done, ctx)) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
118 |
ERROR("render_thread_init"); |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
119 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
120 |
// ok, wait for it to complete |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
121 |
return 0; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
122 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
123 |
error: |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
124 |
// FAAAIL |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
125 |
return -1; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
126 |
} |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
127 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
128 |
static void handle_read (struct bufferevent *bev, void *arg) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
129 |
struct client_info *ctx = arg; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
130 |
struct render_cmd cmd; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
131 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
132 |
// meh, just read it in |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
133 |
size_t len; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
134 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
135 |
// we set a watermark, so this should hold true |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
136 |
assert(len = bufferevent_read(bev, &cmd, sizeof(cmd)) == sizeof(cmd)); |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
137 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
138 |
// fix the byte order |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
139 |
cmd.img_w = ntohl(cmd.img_w); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
140 |
cmd.img_h = ntohl(cmd.img_h); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
141 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
142 |
// handle it |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
143 |
if (handle_render_cmd(ctx, &cmd)) |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
144 |
goto error; |
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
145 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
146 |
// ok |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
147 |
return; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
148 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
149 |
error: |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
150 |
client_free(ctx); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
151 |
} |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
152 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
153 |
static void handle_error (struct bufferevent *bev, short what, void *arg) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
154 |
struct client_info *ctx = arg; |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
155 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
156 |
// read-EOF |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
157 |
if ((what & (EVBUFFER_READ | EVBUFFER_EOF)) && ctx->thread_info.is_active) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
158 |
// this is fine, expected, and doesn't matter |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
159 |
return; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
160 |
} |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
161 |
|
24 | 162 |
PWARNING("client [%p]: eventbuffer error: %s %s", ctx, |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
163 |
(what & EVBUFFER_READ) ? "read" : ((what & EVBUFFER_WRITE) ? "write" : "???"), |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
164 |
(what & EVBUFFER_EOF) ? "eof" : ((what & EVBUFFER_ERROR) ? "error" : ((what & EVBUFFER_TIMEOUT) ? "timeout" : "???")) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
165 |
); |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
166 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
167 |
client_free(ctx); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
168 |
} |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
169 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
170 |
static void handle_accept (evutil_socket_t fd, short event, void *arg) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
171 |
struct client_info *ctx = NULL; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
172 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
173 |
evutil_socket_t socket = -1; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
174 |
struct sockaddr_storage addr; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
175 |
socklen_t addr_len; |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
176 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
177 |
// arg is NULL and unused |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
178 |
(void) arg; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
179 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
180 |
// accept the connection |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
181 |
addr_len = sizeof(struct sockaddr_storage); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
182 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
183 |
if ((socket = accept(fd, (struct sockaddr *) &addr, &addr_len)) == -1) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
184 |
PERROR("accept"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
185 |
|
24 | 186 |
// alloc a new client_info |
187 |
if (!(ctx = calloc(1, sizeof(*ctx)))) |
|
188 |
ERROR("calloc"); |
|
189 |
||
190 |
// store the socket |
|
191 |
ctx->socket = socket; |
|
192 |
||
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
193 |
#if INFO_ENABLED |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
194 |
assert(INET_ADDRSTRLEN < INET6_ADDRSTRLEN); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
195 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
196 |
char addr_buf[INET6_ADDRSTRLEN]; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
197 |
const char *addr_str; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
198 |
short nport; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
199 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
200 |
if (addr.ss_family == AF_UNIX) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
201 |
addr_str = "local"; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
202 |
else if (addr.ss_family == AF_INET || addr.ss_family == AF_INET6) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
203 |
const void *src; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
204 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
205 |
if (addr.ss_family == AF_INET) { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
206 |
src = &(((struct sockaddr_in *) &addr)->sin_addr); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
207 |
nport = ((struct sockaddr_in *) &addr)->sin_port; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
208 |
} else { |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
209 |
src = &(((struct sockaddr_in6 *) &addr)->sin6_addr); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
210 |
nport = ((struct sockaddr_in6 *) &addr)->sin6_port; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
211 |
} |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
212 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
213 |
if (!(inet_ntop(addr.ss_family, src, addr_buf, sizeof(addr_buf)))) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
214 |
PERROR("inet_ntop"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
215 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
216 |
addr_str = addr_buf; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
217 |
} |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
218 |
|
24 | 219 |
INFO("client [%p]: accept from %s:%hu", ctx, addr_str, ntohs(nport)); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
220 |
#endif |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
221 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
222 |
// then a bufferevent so that we can read in the command |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
223 |
if (!(ctx->bufev = bufferevent_new(ctx->socket, &handle_read, NULL, &handle_error, ctx))) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
224 |
ERROR("bufferevent_new"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
225 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
226 |
// and enable it for read only |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
227 |
if (bufferevent_enable(ctx->bufev, EV_READ)) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
228 |
ERROR("bufferevent_enable"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
229 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
230 |
// set the watermark for receiving the render_cmd |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
231 |
bufferevent_setwatermark(ctx->bufev, EV_READ, sizeof(struct render_cmd), 0); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
232 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
233 |
// now we just wait for the cmd... |
24 | 234 |
return; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
235 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
236 |
error: |
21
e2916f8ebaa6
fix memory alloc/free bugs, and one in render_threads where the last row was left out
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
237 |
if (ctx) |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
238 |
client_free(ctx); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
239 |
else if (socket != -1) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
240 |
close(socket); |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
241 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
242 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
243 |
int main (int argc, char** argv) { |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
244 |
struct event_base *ev_base; |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
245 |
struct config_endpoint endpoint; |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
246 |
int ssock; |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
247 |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
248 |
// parse arguments |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
249 |
int opt; |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
250 |
const char *listen_spec = NULL; |
24 | 251 |
int enable_debug = 0; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
252 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
253 |
while ((opt = getopt(argc, argv, "l:")) != -1) { |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
254 |
switch (opt) { |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
255 |
case 'l': |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
256 |
if (listen_spec) |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
257 |
ERROR("only specify -l once"); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
258 |
|
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
259 |
listen_spec = optarg; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
260 |
break; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
261 |
|
24 | 262 |
case 'd': |
263 |
// enable libevent debugging |
|
264 |
enable_debug = 1; |
|
265 |
break; |
|
266 |
||
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
267 |
default: |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
268 |
err_exit("Usage: %s [-l addr_spec] [-d]", argv[0]); |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
269 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
270 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
271 |
|
24 | 272 |
// init libevent |
273 |
if (!(ev_base = event_init())) |
|
274 |
FATAL("event_init"); |
|
275 |
||
276 |
// per default it is enabled |
|
277 |
if (!enable_debug) |
|
278 |
event_set_log_callback(&log_null); |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
279 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
280 |
// create the socket |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
281 |
endpoint_init(&endpoint, RENDER_PORT); |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
282 |
|
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
283 |
if (endpoint_parse(&endpoint, listen_spec)) |
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
284 |
goto error; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
285 |
|
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
286 |
if ((ssock = socket_listen(&endpoint, SOCK_STREAM)) == -1) |
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
287 |
goto error; |
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
288 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
289 |
// create the listen event |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
290 |
struct event listen_ev; |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
291 |
|
24 | 292 |
event_set(&listen_ev, ssock, EV_READ | EV_PERSIST, &handle_accept, NULL); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
293 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
294 |
if (event_add(&listen_ev, NULL)) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
295 |
PERROR("event_add"); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
296 |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
297 |
// ignore sigpipe |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
298 |
sigpipe_ignore(); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
299 |
|
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
300 |
// run the libevent mainloop |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
301 |
INFO("run"); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
302 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
303 |
if (event_base_dispatch(ev_base)) |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
304 |
WARNING("event_dispatch"); |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
305 |
|
24 | 306 |
INFO("SHUTDOWN"); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
307 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
308 |
event_base_free(ev_base); |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
309 |
|
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
310 |
// succesful exit |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
311 |
return EXIT_SUCCESS; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
312 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
313 |
error: |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
314 |
// failure |
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
315 |
return EXIT_FAILURE; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
316 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
317 |