Skip to content

Commit

Permalink
motion: Backport upstream commit to fix running on musl.
Browse files Browse the repository at this point in the history
Reported on OpenWrt forums

https://forum.openwrt.org/t/motion-segmentation-fault-after-upgrade-to-4-14-68/21276

Signed-off-by: Rosen Penev <rosenp@gmail.com>
  • Loading branch information
neheb committed Sep 15, 2018
1 parent bafd573 commit 95cce73
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 1 deletion.
2 changes: 1 addition & 1 deletion multimedia/motion/Makefile
Expand Up @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk

PKG_NAME:=motion
PKG_VERSION:=4.1.1
PKG_RELEASE:=1
PKG_RELEASE:=2

PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
PKG_LICENSE:=GPLv2
Expand Down
@@ -0,0 +1,94 @@
From 3c7cbd685017c1bf9ba2eaa811b63842bec28f64 Mon Sep 17 00:00:00 2001
From: Mr-DaveDev <MotionMrDaveDev@gmail.com>
Date: Mon, 1 Jan 2018 13:07:08 -0700
Subject: [PATCH] Initialize the thread at start of main

Closes #589
---
logger.c | 5 -----
motion.c | 30 ++++++++++++++++--------------
2 files changed, 16 insertions(+), 19 deletions(-)

diff --git a/logger.c b/logger.c
index c55044b..5ef2f85 100644
--- a/logger.c
+++ b/logger.c
@@ -193,11 +193,6 @@ void motion_log(int level, unsigned int type, int errno_flag, const char *fmt, .

//printf("log_type %d, type %d level %d\n", log_type, type, level);

- /*
- * If pthread_getspecific fails (e.g., because the thread's TLS doesn't
- * contain anything for thread number, it returns NULL which casts to zero,
- * which is nice because that's what we want in that case.
- */
threadnr = (unsigned long)pthread_getspecific(tls_key_threadnr);

/*
diff --git a/motion.c b/motion.c
index 985d4b2..9fe58c1 100644
--- a/motion.c
+++ b/motion.c
@@ -2886,10 +2886,6 @@ static void motion_startup(int daemonize, int argc, char *argv[])
}


- //set_log_level(cnt_list[0]->log_level);
-
- MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion "VERSION" Started");
-
if ((cnt_list[0]->conf.log_file) && (strncmp(cnt_list[0]->conf.log_file, "syslog", 6))) {
set_log_mode(LOGMODE_FILE);
ptr_logfile = set_logfile(cnt_list[0]->conf.log_file);
@@ -2908,6 +2904,8 @@ static void motion_startup(int daemonize, int argc, char *argv[])
MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Logging to syslog");
}

+ MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion "VERSION" Started");
+
if ((cnt_list[0]->conf.log_type_str == NULL) ||
!(cnt_list[0]->log_type = get_log_type(cnt_list[0]->conf.log_type_str))) {
cnt_list[0]->log_type = TYPE_DEFAULT;
@@ -3053,8 +3051,22 @@ int main (int argc, char **argv)
*/
struct sigaction sig_handler_action;
struct sigaction sigchild_action;
+
+
setup_signals(&sig_handler_action, &sigchild_action);

+ /*
+ * Create and a thread attribute for the threads we spawn later on.
+ * PTHREAD_CREATE_DETACHED means to create threads detached, i.e.
+ * their termination cannot be synchronized through 'pthread_join'.
+ */
+ pthread_attr_init(&thread_attr);
+ pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
+
+ /* Create the TLS key for thread number. */
+ pthread_key_create(&tls_key_threadnr, NULL);
+ pthread_setspecific(tls_key_threadnr, (void *)(0));
+
motion_startup(1, argc, argv);

ffmpeg_global_init();
@@ -3102,16 +3114,6 @@ int main (int argc, char **argv)
if (cnt_list[0]->conf.setup_mode)
MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion running in setup mode.");

- /*
- * Create and a thread attribute for the threads we spawn later on.
- * PTHREAD_CREATE_DETACHED means to create threads detached, i.e.
- * their termination cannot be synchronized through 'pthread_join'.
- */
- pthread_attr_init(&thread_attr);
- pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
-
- /* Create the TLS key for thread number. */
- pthread_key_create(&tls_key_threadnr, NULL);

do {
if (restart) {
--
2.7.4

0 comments on commit 95cce73

Please sign in to comment.