node_main.c
author Tero Marttila <terom@fixme.fi>
Wed, 27 Aug 2008 21:30:32 +0300
changeset 41 540737bf6bac
parent 26 6d615203d963
permissions -rw-r--r--
sending requests, and partial support for receiving -- incomplete, not tested
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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    34
void log_null (int severity, const char *msg) {
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    35
    // ignore
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    36
}
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    86
#if INFO_ENABLED
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    87
    INFO("client [%p]: %s", ctx, err ? "failed" : "done");
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    88
#endif    
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   186
    // alloc a new client_info
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   187
    if (!(ctx = calloc(1, sizeof(*ctx))))
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   188
        ERROR("calloc");
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   189
    
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   190
    // store the socket
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   191
    ctx->socket = socket;
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   262
            case 'd':
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   263
                // enable libevent debugging
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   264
                enable_debug = 1;
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   265
                break;
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   272
    // init libevent
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   273
    if (!(ev_base = event_init()))
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   274
        FATAL("event_init");
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   275
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   276
    // per default it is enabled
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   277
    if (!enable_debug)
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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
8307d28329ae render_thread works now
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
   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