node_main.c
author Tero Marttila <terom@fixme.fi>
Tue, 17 Jun 2008 16:39:55 +0300
changeset 19 d18606bb6f20
parent 12 43297144f196
child 21 e2916f8ebaa6
permissions -rw-r--r--
a working threaded sliced render, plus modifications to other modules to use this in web_main

committer: Tero Marttila <terom@fixme.fi>
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 <sys/socket.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 <stdlib.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 <signal.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 <string.h>
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
#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
     9
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
#include "common.h"
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
#include "render.h"
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
#include "render_remote.h"  // for RENDER_PORT_NAME
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
#include "render_local.h"
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
    14
#include "render_threads.h"
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
void sigpipe_handler (int signal) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    /* ignore */
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    fprintf(stderr, "SIGPIPE\n");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
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
    22
    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
    23
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    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
    25
    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
    26
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    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
    28
        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
    29
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
int my_fread(FILE *fh, void *ptr, size_t size) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    int ret = fread(ptr, size, 1, fh);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    if (ret == 0) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        error("EOF");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        return 0;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    } else if (ret != 1) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        perror("fread");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        return 0;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    }
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    return 1;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
int read_byte (FILE *fh, u_int8_t *byte) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    return my_fread(fh, byte, sizeof(*byte));
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
int read_int (FILE *fh, u_int32_t *i) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    if (!my_fread(fh, i, sizeof(*i)))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        return 0;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    *i = ntohl(*i);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    return 1;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
int read_double (FILE *fh, double *dbl) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
    if (!my_fread(fh, dbl, sizeof(*dbl)))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
        return 0;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    return 1;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
void handle_client (int sock) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    double duration;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    struct render *ctx;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    FILE *fh;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    u_int8_t mode;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    u_int32_t img_w, img_h;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    double x1, y1, x2, y2;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    // open it as a FILE*
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    if (!(fh = fdopen(sock, "r+")))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        ERROR("fdopen");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
    // read the parameters
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    if (
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
            !read_byte(fh, &mode)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
         || !read_int(fh, &img_w)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
         || !read_int(fh, &img_h)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
         || !read_double(fh, &x1)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
         || !read_double(fh, &y1)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
         || !read_double(fh, &x2)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
         || !read_double(fh, &y2)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    )
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
        ERROR("read_{byte,int,double}");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
    printf("RENDER: [%ux%u] (%f, %f) -> (%f, %f): ... ", img_w, img_h, x1, y1, x2, y2);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
    fflush(stdout);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    // set up the render_ctx
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    if (!(ctx = render_alloc()))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
        ERROR("render_alloc");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    if (render_set_mode(ctx, mode))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        ERROR("render_set_mode");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
    if (render_set_size(ctx, img_w, img_h))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
        ERROR("render_set_size");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
    if (render_region_raw(ctx, x1, y1, x2, y2))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        ERROR("render_region_raw");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    if (render_io_stream(ctx, fh))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
        ERROR("render_io_stream");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
    
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
   110
    struct render_threads *threads_info = NULL;
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
   111
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
   112
    // render threaded \o/
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
   113
    if (!(threads_info = render_threads_alloc(ctx)))
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
   114
        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
   115
    
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
   116
    if (render_threads_wait(threads_info))
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
   117
        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
   118
    
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
   119
    printf("done!\n");
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
   120
/*
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
    // render!
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
    if (render_local(ctx, &duration))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
        ERROR("render_local");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
    printf("time=%fs\n", duration);
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
   126
*/
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
   127
    
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
   128
    // fall through to just clean up normally
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
error:
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
   131
    // free the threads_info?
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
   132
    if (threads_info)
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
   133
        render_threads_free(threads_info);
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
   134
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
    // close the FILE* and socket
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
    fclose(fh);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
    return;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
int main (int argc, char** argv) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    int ssock, sock;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
    struct sockaddr_in addr;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    socklen_t addr_len;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
    // parse arguments
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
    int opt;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
    const char *port_name = NULL;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
    unsigned short port;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    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
   153
        switch (opt) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
            case 'l':
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
                if (port_name)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
                    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
   157
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
                port_name = optarg;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
                break;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
            default:
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
                err_exit("Usage: %s [-l port]", argv[0]);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
        }
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
    }
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
    // post-process arguments
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    if (!port_name)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        port_name = RENDER_PORT_NAME;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
    if (!(port = atoi(port_name)))
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
        ERROR("invalid port: %s", port_name);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
    // create the socket
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
    if ((ssock = socket(PF_INET, SOCK_STREAM, 0)) == -1)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
        PERROR("socket");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
    addr.sin_family = AF_INET;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
    addr.sin_port = htons(port);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
    addr.sin_addr.s_addr = INADDR_ANY;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    if (bind(ssock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
        PERROR("bind");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
    if (listen(ssock, 1) == -1)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
        PERROR("listen");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
    // ignore sigpipe
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    sigpipe_ignore();
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
    // main accept loop
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
    printf("RUN: %s:%hu\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
    while (1) {
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
        addr_len = sizeof(struct sockaddr_in);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
        // accept a new client
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
        if ((sock = accept(ssock, (struct sockaddr *) &addr, &addr_len)) == -1)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
            PERROR("accept");
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
        
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
        printf("ACCEPT: %s:%hu\n", inet_ntoa(addr.sin_addr), addr.sin_port);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
        
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
        // handle their resquest
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
        handle_client(sock);
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
    }
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
error:
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
    return 1;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
}
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209