From ff06794c006bbe4523dbad911d883131b8394c0c Mon Sep 17 00:00:00 2001 From: Hummeltech <6109326+hummeltech@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:34:39 -0700 Subject: [PATCH] Added missing signal handlers (#364) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `renderd` coverage is otherwise not properly reported _Also:_ - Removed `freebsd12` from CI - Packages are no longer provided (http://pkg.freebsd.org/) - Added test for `HTCP host name` specification - Renamed files in `src`/`includes` to match target names - `src/daemon.c` → `src/renderd.c` - `src/speedtest.cpp` →`src/render_speedtest.cpp` - `includes/daemon.h` → `includes/renderd.h` --- .github/workflows/build-and-test.yml | 1 - .github/workflows/coverage.yml | 3 -- Makefile.am | 6 +-- includes/render_config.h | 6 ++- includes/{daemon.h => renderd.h} | 4 +- src/CMakeLists.txt | 4 +- src/gen_tile.cpp | 2 +- src/render_list.c | 1 - src/{speedtest.cpp => render_speedtest.cpp} | 50 --------------------- src/{daemon.c => renderd.c} | 14 ++++-- tests/renderd.conf.in | 1 + 11 files changed, 25 insertions(+), 67 deletions(-) rename includes/{daemon.h => renderd.h} (98%) rename src/{speedtest.cpp => render_speedtest.cpp} (88%) rename src/{daemon.c => renderd.c} (99%) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 63cf5b7..6efa7e8 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -186,7 +186,6 @@ jobs: strategy: matrix: box_generic: - - freebsd12 - freebsd13 build_system: - CMake diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index ea4cf6e..c598ccf 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -34,9 +34,6 @@ jobs: - name: Test `mod_tile` uses: ./.github/actions/cmake/test - - name: Test `mod_tile` again (to gather more coverage data) - uses: ./.github/actions/cmake/test - - name: Process `mod_tile` coverage results run: | ctest -T coverage diff --git a/Makefile.am b/Makefile.am index f822e00..b26b9fd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -37,7 +37,7 @@ man_MANS = \ renderddir = $(sysconfdir) renderd_SOURCES = \ - src/daemon.c \ + src/renderd.c \ src/daemon_compat.c \ src/gen_tile.cpp \ src/sys_utils.c \ @@ -52,7 +52,7 @@ renderd_LDADD = $(PTHREAD_CFLAGS) $(MAPNIK_LDFLAGS) $(STORE_LDFLAGS) $(INIPARSER renderd_DATA = etc/renderd/renderd.conf render_speedtest_SOURCES = \ - src/speedtest.cpp \ + src/render_speedtest.cpp \ src/protocol_helper.c \ src/render_submit_queue.c \ src/sys_utils.c \ @@ -91,7 +91,7 @@ gen_tile_test_SOURCES = \ src/metatile.cpp \ src/request_queue.c \ src/protocol_helper.c \ - src/daemon.c \ + src/renderd.c \ src/daemon_compat.c \ src/gen_tile.cpp \ src/sys_utils.c \ diff --git a/includes/render_config.h b/includes/render_config.h index f0ccbd9..d7ab06f 100644 --- a/includes/render_config.h +++ b/includes/render_config.h @@ -89,9 +89,13 @@ #define REQUEST_TIMEOUT (3) #define FD_INVALID (-1) - +#ifndef MIN #define MIN(x,y) ((x)<(y)?(x):(y)) +#endif + +#ifndef MAX #define MAX(x,y) ((x)>(y)?(x):(y)) +#endif #define MAX_CONNECTIONS (2048) diff --git a/includes/daemon.h b/includes/renderd.h similarity index 98% rename from includes/daemon.h rename to includes/renderd.h index ecff546..b546071 100644 --- a/includes/daemon.h +++ b/includes/renderd.h @@ -15,8 +15,8 @@ * along with this program; If not, see http://www.gnu.org/licenses/. */ -#ifndef DAEMON_H -#define DAEMON_H +#ifndef RENDERD_H +#define RENDERD_H #ifdef __cplusplus extern "C" { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7710c6f..cedd1dc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -143,8 +143,8 @@ target_link_libraries(render_old ${render_old_LIBS}) set(render_speedtest_SRCS ${COMMON_SRCS} protocol_helper.c + render_speedtest.cpp render_submit_queue.c - speedtest.cpp ) set(render_speedtest_LIBS ${COMMON_LIBRARIES} @@ -163,11 +163,11 @@ set(renderd_SRCS ${STORE_SRCS} cache_expire.c daemon_compat.c - daemon.c gen_tile.cpp metatile.cpp parameterize_style.cpp protocol_helper.c + renderd.c request_queue.c ) set(renderd_LIBS diff --git a/src/gen_tile.cpp b/src/gen_tile.cpp index 899b43d..8f69066 100644 --- a/src/gen_tile.cpp +++ b/src/gen_tile.cpp @@ -39,7 +39,7 @@ #include "gen_tile.h" #include "render_config.h" -#include "daemon.h" +#include "renderd.h" #include "store.h" #include "metatile.h" #include "protocol.h" diff --git a/src/render_list.c b/src/render_list.c index 77a4156..c551ac6 100644 --- a/src/render_list.c +++ b/src/render_list.c @@ -357,7 +357,6 @@ int main(int argc, char **argv) if (force || (s.size < 0) || (s.expired)) { // missing or old, render it - //ret = process_loop(fd, mapname, x, y, z); enqueue(mapname, x, y, z); num_render++; diff --git a/src/speedtest.cpp b/src/render_speedtest.cpp similarity index 88% rename from src/speedtest.cpp rename to src/render_speedtest.cpp index a373c7e..456e4db 100644 --- a/src/speedtest.cpp +++ b/src/render_speedtest.cpp @@ -76,8 +76,6 @@ int foreground = 1; static double minmax(double a, double b, double c) { -#define MIN(x,y) ((x)<(y)?(x):(y)) -#define MAX(x,y) ((x)>(y)?(x):(y)) a = MAX(a, b); a = MIN(a, c); return a; @@ -136,54 +134,6 @@ void display_rate(struct timeval start, struct timeval end, int num) fflush(NULL); } -int rx_process(const struct protocol *req) -{ - fprintf(stderr, "version(%d), cmd(%d), z(%d), x(%d), y(%d)\n", - req->ver, req->cmd, req->z, req->x, req->y); - return 0; -} - -int process_loop(int fd, int x, int y, int z, const char * map) -{ - struct protocol cmd, rsp; - //struct pollfd fds[1]; - int ret = 0; - - bzero(&cmd, sizeof(cmd)); - - cmd.ver = 2; - cmd.cmd = cmdRender; - cmd.z = z; - cmd.x = x; - cmd.y = y; - strcpy(cmd.xmlname, map); - //strcpy(cmd.path, "/tmp/foo.png"); - - //printf("Sending request\n"); - ret = send(fd, &cmd, sizeof(cmd), 0); - - if (ret != sizeof(cmd)) { - perror("send error"); - } - - //printf("Waiting for response\n"); - bzero(&rsp, sizeof(rsp)); - ret = recv(fd, &rsp, sizeof(rsp), 0); - - if (ret != sizeof(rsp)) { - perror("recv error"); - return 0; - } - - //printf("Got response\n"); - - if (!ret) { - perror("Socket send error"); - } - - return ret; -} - int main(int argc, char **argv) { const char *spath = RENDERD_SOCKET; diff --git a/src/daemon.c b/src/renderd.c similarity index 99% rename from src/daemon.c rename to src/renderd.c index aa636ba..e35f238 100644 --- a/src/daemon.c +++ b/src/renderd.c @@ -36,7 +36,7 @@ #include "config.h" #include "render_config.h" -#include "daemon.h" +#include "renderd.h" #include "gen_tile.h" #include "protocol.h" #include "protocol_helper.h" @@ -58,7 +58,7 @@ #ifndef MAIN_ALREADY_DEFINED static pthread_t *render_threads; static pthread_t *slave_threads; -static struct sigaction sigPipeAction; +static struct sigaction sigPipeAction, sigExitAction; static pthread_t stats_thread; #endif @@ -1097,6 +1097,7 @@ int main(int argc, char **argv) } fd = server_socket_init(&config); + #if 0 if (fcntl(fd, F_SETFD, O_RDWR | O_NONBLOCK) < 0) { @@ -1107,7 +1108,6 @@ int main(int argc, char **argv) #endif - //sigPipeAction.sa_handler = pipe_handler; sigPipeAction.sa_handler = SIG_IGN; if (sigaction(SIGPIPE, &sigPipeAction, NULL) < 0) { @@ -1116,6 +1116,14 @@ int main(int argc, char **argv) exit(6); } + sigExitAction.sa_handler = (void *) request_exit; + + sigaction(SIGHUP, &sigExitAction, NULL); + + sigaction(SIGINT, &sigExitAction, NULL); + + sigaction(SIGTERM, &sigExitAction, NULL); + render_init(config.mapnik_plugins_dir, config.mapnik_font_dir, config.mapnik_font_dir_recurse); /* unless the command line said to run in foreground mode, fork and detach from terminal */ diff --git a/tests/renderd.conf.in b/tests/renderd.conf.in index 9129844..f6a756f 100644 --- a/tests/renderd.conf.in +++ b/tests/renderd.conf.in @@ -4,6 +4,7 @@ font_dir_recurse=@MAPNIK_FONTS_DIR_RECURSE@ plugins_dir=@MAPNIK_PLUGINS_DIR@ [@DEFAULT_MAP_NAME@] +HTCPHOST=@HTTPD0_HOST@ TILEDIR=@PROJECT_BINARY_DIR@/tests/tiles URI=/tiles/@DEFAULT_MAP_NAME@ XML=@PROJECT_SOURCE_DIR@/utils/example-map/mapnik.xml