From 7d598d4a706e06e7e89218ca9ae071dd630cb2b3 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Tue, 29 Aug 2017 18:34:26 +0200 Subject: irmd: Fix deleting corrupt shm file This will delete the rdrbuff also when it has been corrupted before. Otherwise the irmd won't start, as experienced on my desktop. --- include/ouroboros/shm_rdrbuff.h | 2 ++ src/irmd/main.c | 2 +- src/lib/shm_rdrbuff.c | 12 ++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/ouroboros/shm_rdrbuff.h b/include/ouroboros/shm_rdrbuff.h index 079c11b2..29410ac3 100644 --- a/include/ouroboros/shm_rdrbuff.h +++ b/include/ouroboros/shm_rdrbuff.h @@ -41,6 +41,8 @@ void shm_rdrbuff_close(struct shm_rdrbuff * rdrb); void shm_rdrbuff_destroy(struct shm_rdrbuff * rdrb); +void shm_rdrbuff_purge(void); + int shm_rdrbuff_wait_full(struct shm_rdrbuff * rdrb, struct timespec * timeo); diff --git a/src/irmd/main.c b/src/irmd/main.c index 1d62de85..c5caff6c 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -2204,7 +2204,7 @@ static int irm_init(void) if (kill(lockfile_owner(irmd.lf), 0) < 0) { log_info("IRMd didn't properly shut down last time."); - shm_rdrbuff_destroy(shm_rdrbuff_open()); + shm_rdrbuff_purge(); log_info("Stale resources cleaned."); lockfile_destroy(irmd.lf); irmd.lf = lockfile_create(); diff --git a/src/lib/shm_rdrbuff.c b/src/lib/shm_rdrbuff.c index d8893677..a3333a35 100644 --- a/src/lib/shm_rdrbuff.c +++ b/src/lib/shm_rdrbuff.c @@ -323,6 +323,18 @@ void shm_rdrbuff_close(struct shm_rdrbuff * rdrb) free(rdrb); } +void shm_rdrbuff_purge(void) +{ + char * shm_rdrb_fn; + + shm_rdrb_fn = rdrb_filename(); + if (shm_rdrb_fn == NULL) + return; + + shm_unlink(shm_rdrb_fn); + free(shm_rdrb_fn); +} + void shm_rdrbuff_destroy(struct shm_rdrbuff * rdrb) { char * shm_rdrb_fn; -- cgit v1.2.3 From e533ca60b841193fbdb7d135de3d9e56916445c2 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Tue, 29 Aug 2017 18:37:58 +0200 Subject: tools: irm: Fix matching of name parameter The name parameter was not being matched correctly in ipcp connect and disconnect. --- src/tools/irm/irm.c | 2 +- src/tools/irm/irm_ipcp.c | 3 ++- src/tools/irm/irm_ipcp_connect.c | 12 ++++++------ src/tools/irm/irm_ipcp_disconnect.c | 12 ++++++------ 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/tools/irm/irm.c b/src/tools/irm/irm.c index 4e275e48..a77f9b7b 100644 --- a/src/tools/irm/irm.c +++ b/src/tools/irm/irm.c @@ -34,7 +34,7 @@ static void usage(void) { printf("Usage: irm [OPERATION]\n\n" "where OPERATION = {ipcp bind unbind\n" - " register unregister\n"); + " register unregister}\n"); } static int do_help(int argc, char **argv) diff --git a/src/tools/irm/irm_ipcp.c b/src/tools/irm/irm_ipcp.c index 2f7b01c9..fb1a66b9 100644 --- a/src/tools/irm/irm_ipcp.c +++ b/src/tools/irm/irm_ipcp.c @@ -29,7 +29,8 @@ static void usage(void) { printf("Usage: irm ipcp [OPERATION]\n\n" "where OPERATION = {create destroy\n" - " bootstrap enroll help}\n"); + " bootstrap enroll\n" + " connect disconnect help}\n"); } static int do_help(int argc, char **argv) diff --git a/src/tools/irm/irm_ipcp_connect.c b/src/tools/irm/irm_ipcp_connect.c index 168c8d17..3f52e6f8 100644 --- a/src/tools/irm/irm_ipcp_connect.c +++ b/src/tools/irm/irm_ipcp_connect.c @@ -35,10 +35,10 @@ static void usage(void) { printf("Usage: irm ipcp connect\n" - " name \n" - " comp \n" - " dst \n" - "where COMPONENT = {" DT " " MGMT "},\n\n"); + " name \n" + " component [COMPONENT]\n" + " dst \n\n" + "where COMPONENT = {" DT " " MGMT "}\n"); } int do_connect_ipcp(int argc, @@ -51,11 +51,11 @@ int do_connect_ipcp(int argc, ssize_t len = 0; while (argc > 0) { - if (strcmp(*argv, "name") == 0) { + if (matches(*argv, "name") == 0) { name = *(argv + 1); } else if (matches(*argv, "dst") == 0) { dst_name = *(argv + 1); - } else if (matches(*argv, "comp") == 0) { + } else if (matches(*argv, "component") == 0) { comp_name = *(argv + 1); } else { printf("\"%s\" is unknown, try \"irm " diff --git a/src/tools/irm/irm_ipcp_disconnect.c b/src/tools/irm/irm_ipcp_disconnect.c index 8f83f3e8..2a4bbd38 100644 --- a/src/tools/irm/irm_ipcp_disconnect.c +++ b/src/tools/irm/irm_ipcp_disconnect.c @@ -35,10 +35,10 @@ static void usage(void) { printf("Usage: irm ipcp disconnect\n" - " name \n" - " comp \n" - " dst \n" - "where COMPONENT = {" DT " " MGMT "},\n\n"); + " name \n" + " component [COMPONENT]\n" + " dst \n\n" + "where COMPONENT = {" DT " " MGMT "}\n"); } int do_disconnect_ipcp(int argc, @@ -51,11 +51,11 @@ int do_disconnect_ipcp(int argc, ssize_t len = 0; while (argc > 0) { - if (strcmp(*argv, "name") == 0) { + if (matches(*argv, "name") == 0) { name = *(argv + 1); } else if (matches(*argv, "dst") == 0) { dst_name = *(argv + 1); - } else if (matches(*argv, "comp") == 0) { + } else if (matches(*argv, "component") == 0) { comp_name = *(argv + 1); } else { printf("\"%s\" is unknown, try \"irm " -- cgit v1.2.3