workaround asterisk daemon issue #4071 caused by uclibc 0.29 (thanks to charles.kirsch)
git-svn-id: svn://svn.openwrt.org/openwrt/packages@13712 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
6bf133f21e
commit
875a29e26e
@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=asterisk
|
||||
PKG_VERSION:=1.4.22
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://downloads.digium.com/pub/asterisk/releases/
|
||||
|
@ -0,0 +1,42 @@
|
||||
diff -Nru asterisk-1.4.22.org/main/asterisk.c asterisk-1.4.22/main/asterisk.c
|
||||
--- asterisk-1.4.22.org/main/asterisk.c 2008-07-26 17:31:21.000000000 +0200
|
||||
+++ asterisk-1.4.22/main/asterisk.c 2008-12-20 22:49:58.000000000 +0100
|
||||
@@ -2935,7 +2935,38 @@
|
||||
#if HAVE_WORKING_FORK
|
||||
if (ast_opt_always_fork || !ast_opt_no_fork) {
|
||||
#ifndef HAVE_SBIN_LAUNCHD
|
||||
+#ifndef __UCLIBC__
|
||||
daemon(1, 0);
|
||||
+#else
|
||||
+/*
|
||||
+ workaround for uClibc-0.9.29 mipsel bug:
|
||||
+ recursive mutexes do not work if uClibc daemon() function has been called,
|
||||
+ if parent thread locks a mutex
|
||||
+ the child thread cannot acquire a lock with the same name
|
||||
+ (same code works if daemon() is not called)
|
||||
+ but duplication of uClibc daemon.c code in here does work.
|
||||
+*/
|
||||
+ int fd;
|
||||
+ switch (fork()) {
|
||||
+ case -1:
|
||||
+ exit(1);
|
||||
+ case 0:
|
||||
+ break;
|
||||
+ default:
|
||||
+ _exit(0);
|
||||
+ }
|
||||
+ if (setsid() == -1)
|
||||
+ exit(1);
|
||||
+ if (fork())
|
||||
+ _exit(0);
|
||||
+ if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
|
||||
+ dup2(fd, STDIN_FILENO);
|
||||
+ dup2(fd, STDOUT_FILENO);
|
||||
+ dup2(fd, STDERR_FILENO);
|
||||
+ if (fd > 2)
|
||||
+ close(fd);
|
||||
+ }
|
||||
+#endif
|
||||
ast_mainpid = getpid();
|
||||
/* Blindly re-write pid file since we are forking */
|
||||
unlink(ast_config_AST_PID);
|
Loading…
x
Reference in New Issue
Block a user