aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2014-03-25 07:44:43 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2014-03-26 07:45:56 +0000
commit0c6ff3cb4601533fb3ecdc9d44ed269fa0f33570 (patch)
treee9c647782d1830673e8656093a2e1fd3ee3b7b08
parent3eaaab362d8e55b856dc513c2bcbed581a12fe41 (diff)
downloadaports-0c6ff3cb4601533fb3ecdc9d44ed269fa0f33570.tar.bz2
aports-0c6ff3cb4601533fb3ecdc9d44ed269fa0f33570.tar.xz
main/uwsgi: moved from testing
fixes #2779
-rw-r--r--main/uwsgi/0001-core-socket-common-socket-creation-function-for-bind.patch91
-rw-r--r--main/uwsgi/0001-use-portable-pthread-functions-instead-of-the-non-po.patch40
-rw-r--r--main/uwsgi/0002-Check-for-GNU-libc-instead-of-linux-for-use-of-execi.patch31
-rw-r--r--main/uwsgi/0002-core-socket-move-socket-buffer-size-setting-to-creat.patch97
-rw-r--r--main/uwsgi/0003-always-define-_GNU_SOURCE-for-linux.patch64
-rw-r--r--main/uwsgi/0003-core-socket-move-listen-queue-size-checking-to-creat.patch65
-rw-r--r--main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch73
-rw-r--r--main/uwsgi/0004-define-WAIT_ANY-if-missing.patch34
-rw-r--r--main/uwsgi/0005-option-for-closing-server-sockets-when-spawning.patch70
-rw-r--r--main/uwsgi/APKBUILD (renamed from testing/uwsgi/APKBUILD)0
-rw-r--r--main/uwsgi/musl-fix-python.patch13
-rw-r--r--main/uwsgi/uwsgi.confd (renamed from testing/uwsgi/uwsgi.confd)0
-rw-r--r--main/uwsgi/uwsgi.initd (renamed from testing/uwsgi/uwsgi.initd)0
13 files changed, 578 insertions, 0 deletions
diff --git a/main/uwsgi/0001-core-socket-common-socket-creation-function-for-bind.patch b/main/uwsgi/0001-core-socket-common-socket-creation-function-for-bind.patch
new file mode 100644
index 0000000000..45b861f500
--- /dev/null
+++ b/main/uwsgi/0001-core-socket-common-socket-creation-function-for-bind.patch
@@ -0,0 +1,91 @@
+From 4d43a66581168674a9db52ac9bf690fa4f106dca Mon Sep 17 00:00:00 2001
+From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
+Date: Wed, 1 Jan 2014 23:36:26 +0200
+Subject: [PATCH 1/5] core/socket: common socket creation function for
+ bind_to_*
+
+---
+ core/socket.c | 40 +++++++++++++++++-----------------------
+ 1 file changed, 17 insertions(+), 23 deletions(-)
+
+diff --git a/core/socket.c b/core/socket.c
+index 0696eff..7e47dc0 100644
+--- a/core/socket.c
++++ b/core/socket.c
+@@ -76,18 +76,23 @@ char *uwsgi_getsockname(int fd) {
+ return NULL;
+ }
+
++static int create_server_socket(int domain, int type) {
++ int serverfd = socket(domain, type, 0);
++ if (serverfd < 0) {
++ uwsgi_error("socket()");
++ uwsgi_nuclear_blast();
++ }
++ return serverfd;
++}
++
+ int bind_to_unix_dgram(char *socket_name) {
+
+ int serverfd;
+ struct sockaddr_un *uws_addr;
+ socklen_t len;
+
+- serverfd = socket(AF_UNIX, SOCK_DGRAM, 0);
+- if (serverfd < 0) {
+- uwsgi_error("socket()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
++ serverfd = create_server_socket(AF_UNIX, SOCK_DGRAM);
++ if (serverfd < 0) return -1;
+
+ if (unlink(socket_name) != 0 && errno != ENOENT) {
+ uwsgi_error("error removing unix socket, unlink()");
+@@ -140,12 +145,8 @@ int bind_to_unix(char *socket_name, int listen_queue, int chmod_socket, int abst
+ }
+
+ memset(uws_addr, 0, sizeof(struct sockaddr_un));
+- serverfd = socket(AF_UNIX, SOCK_STREAM, 0);
+- if (serverfd < 0) {
+- uwsgi_error("socket()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
++ serverfd = create_server_socket(AF_UNIX, SOCK_STREAM);
++ if (serverfd < 0) return -1;
+ if (abstract_socket == 0) {
+ if (unlink(socket_name) != 0 && errno != ENOENT) {
+ uwsgi_error("unlink()");
+@@ -288,11 +289,8 @@ int bind_to_udp(char *socket_name, int multicast, int broadcast) {
+ }
+
+
+- serverfd = socket(AF_INET, SOCK_DGRAM, 0);
+- if (serverfd < 0) {
+- uwsgi_error("socket()");
+- return -1;
+- }
++ serverfd = create_server_socket(AF_INET, SOCK_DGRAM);
++ if (serverfd < 0) return -1;
+
+ if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) {
+ uwsgi_error("setsockopt()");
+@@ -667,12 +665,8 @@ int bind_to_tcp(char *socket_name, int listen_queue, char *tcp_port) {
+ #endif
+
+
+- serverfd = socket(family, SOCK_STREAM, 0);
+- if (serverfd < 0) {
+- uwsgi_error("socket()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
++ serverfd = create_server_socket(family, SOCK_STREAM);
++ if (serverfd < 0) return -1;
+
+ if (uwsgi.so_sndbuf) {
+ socklen_t sndbuf = (socklen_t) uwsgi.so_sndbuf;
+--
+1.8.4.2
+
diff --git a/main/uwsgi/0001-use-portable-pthread-functions-instead-of-the-non-po.patch b/main/uwsgi/0001-use-portable-pthread-functions-instead-of-the-non-po.patch
new file mode 100644
index 0000000000..cab800620a
--- /dev/null
+++ b/main/uwsgi/0001-use-portable-pthread-functions-instead-of-the-non-po.patch
@@ -0,0 +1,40 @@
+From 1a09a7264026339d8e0c4899a2f9ff488c0bd97d Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Mon, 10 Feb 2014 12:13:00 +0000
+Subject: [PATCH 1/4] use portable pthread functions instead of the
+ non-portable
+
+The pthread functions pthread_mutexattr_setrobust and
+pthread_mutex_consistent are in posix nowdays. Use those instead of their
+non-portable synonyms.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ core/lock.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/core/lock.c b/core/lock.c
+index d368148..f806b2c 100644
+--- a/core/lock.c
++++ b/core/lock.c
+@@ -99,7 +99,7 @@ retry:
+ exit(1);
+ }
+ if (uwsgi_pthread_robust_mutexes_enabled) {
+- if (pthread_mutexattr_setrobust_np(&attr, PTHREAD_MUTEX_ROBUST)) {
++ if (pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST)) {
+ uwsgi_log("unable to make the mutex 'robust'\n");
+ exit(1);
+ }
+@@ -161,7 +161,7 @@ void uwsgi_lock_fast(struct uwsgi_lock_item *uli) {
+ #ifdef EOWNERDEAD
+ if (pthread_mutex_lock((pthread_mutex_t *) uli->lock_ptr) == EOWNERDEAD) {
+ uwsgi_log("[deadlock-detector] a process holding a robust mutex died. recovering...\n");
+- pthread_mutex_consistent_np((pthread_mutex_t *) uli->lock_ptr);
++ pthread_mutex_consistent((pthread_mutex_t *) uli->lock_ptr);
+ }
+ #else
+ pthread_mutex_lock((pthread_mutex_t *) uli->lock_ptr);
+--
+1.8.5.3
+
diff --git a/main/uwsgi/0002-Check-for-GNU-libc-instead-of-linux-for-use-of-execi.patch b/main/uwsgi/0002-Check-for-GNU-libc-instead-of-linux-for-use-of-execi.patch
new file mode 100644
index 0000000000..8ab4d9ffff
--- /dev/null
+++ b/main/uwsgi/0002-Check-for-GNU-libc-instead-of-linux-for-use-of-execi.patch
@@ -0,0 +1,31 @@
+From ab68dc90d3a6e3ae660adb65cf8a020d91eb8f09 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Mon, 10 Feb 2014 12:17:18 +0000
+Subject: [PATCH 2/4] Check for GNU libc instead of linux for use of execinfo.h
+
+Since execinfo.h is a GNU extension it makes more sense to check for GNU
+than to assume that linux is GNU.
+
+This is needed for building on linux with musl libc.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ core/uwsgi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/core/uwsgi.c b/core/uwsgi.c
+index 67b175b..b3b25ae 100644
+--- a/core/uwsgi.c
++++ b/core/uwsgi.c
+@@ -1690,7 +1690,7 @@ void uwsgi_plugins_atexit(void) {
+
+ void uwsgi_backtrace(int depth) {
+
+-#if defined(__linux__) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
++#if defined(__GLIBC__) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
+
+ #include <execinfo.h>
+
+--
+1.8.5.3
+
diff --git a/main/uwsgi/0002-core-socket-move-socket-buffer-size-setting-to-creat.patch b/main/uwsgi/0002-core-socket-move-socket-buffer-size-setting-to-creat.patch
new file mode 100644
index 0000000000..88cb2b73a4
--- /dev/null
+++ b/main/uwsgi/0002-core-socket-move-socket-buffer-size-setting-to-creat.patch
@@ -0,0 +1,97 @@
+From 32b71268365456f246d20212e0acf63bfdf9ffe6 Mon Sep 17 00:00:00 2001
+From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
+Date: Wed, 1 Jan 2014 23:46:02 +0200
+Subject: [PATCH 2/5] core/socket: move socket buffer size setting to
+ create_server_socket
+
+---
+ core/socket.c | 58 ++++++++++++++++++++++------------------------------------
+ 1 file changed, 22 insertions(+), 36 deletions(-)
+
+diff --git a/core/socket.c b/core/socket.c
+index 7e47dc0..ee63b98 100644
+--- a/core/socket.c
++++ b/core/socket.c
+@@ -81,7 +81,29 @@ static int create_server_socket(int domain, int type) {
+ if (serverfd < 0) {
+ uwsgi_error("socket()");
+ uwsgi_nuclear_blast();
++ return -1;
++ }
++
++ if (type == SOCK_STREAM) {
++ if (uwsgi.so_sndbuf) {
++ socklen_t sndbuf = (socklen_t) uwsgi.so_sndbuf;
++ if (setsockopt(serverfd, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(socklen_t)) < 0) {
++ uwsgi_error("SO_SNDBUF setsockopt()");
++ uwsgi_nuclear_blast();
++ return -1;
++ }
++ }
++
++ if (uwsgi.so_rcvbuf) {
++ socklen_t rcvbuf = (socklen_t) uwsgi.so_rcvbuf;
++ if (setsockopt(serverfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(socklen_t)) < 0) {
++ uwsgi_error("SO_RCVBUF setsockopt()");
++ uwsgi_nuclear_blast();
++ return -1;
++ }
++ }
+ }
++
+ return serverfd;
+ }
+
+@@ -157,24 +179,6 @@ int bind_to_unix(char *socket_name, int listen_queue, int chmod_socket, int abst
+ uwsgi_log("setting abstract socket mode (warning: only Linux supports this)\n");
+ }
+
+- if (uwsgi.so_sndbuf) {
+- socklen_t sndbuf = (socklen_t) uwsgi.so_sndbuf;
+- if (setsockopt(serverfd, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(socklen_t)) < 0) {
+- uwsgi_error("SO_SNDBUF setsockopt()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
+- }
+-
+- if (uwsgi.so_rcvbuf) {
+- socklen_t rcvbuf = (socklen_t) uwsgi.so_rcvbuf;
+- if (setsockopt(serverfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(socklen_t)) < 0) {
+- uwsgi_error("SO_RCVBUF setsockopt()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
+- }
+-
+ uws_addr->sun_family = AF_UNIX;
+ if (socket_name[0] == '@') {
+ memcpy(uws_addr->sun_path + abstract_socket, socket_name + 1, UMIN(strlen(socket_name + 1), 101));
+@@ -668,24 +672,6 @@ int bind_to_tcp(char *socket_name, int listen_queue, char *tcp_port) {
+ serverfd = create_server_socket(family, SOCK_STREAM);
+ if (serverfd < 0) return -1;
+
+- if (uwsgi.so_sndbuf) {
+- socklen_t sndbuf = (socklen_t) uwsgi.so_sndbuf;
+- if (setsockopt(serverfd, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(socklen_t)) < 0) {
+- uwsgi_error("SO_SNDBUF setsockopt()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
+- }
+-
+- if (uwsgi.so_rcvbuf) {
+- socklen_t rcvbuf = (socklen_t) uwsgi.so_rcvbuf;
+- if (setsockopt(serverfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(socklen_t)) < 0) {
+- uwsgi_error("SO_RCVBUF setsockopt()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
+- }
+-
+ if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) {
+ uwsgi_error("SO_REUSEADDR setsockopt()");
+ uwsgi_nuclear_blast();
+--
+1.8.4.2
+
diff --git a/main/uwsgi/0003-always-define-_GNU_SOURCE-for-linux.patch b/main/uwsgi/0003-always-define-_GNU_SOURCE-for-linux.patch
new file mode 100644
index 0000000000..5b02cb6ef4
--- /dev/null
+++ b/main/uwsgi/0003-always-define-_GNU_SOURCE-for-linux.patch
@@ -0,0 +1,64 @@
+From c6ddb3e4ca72f6ec8662f8a18674eb4d861561b8 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Mon, 10 Feb 2014 13:03:50 +0000
+Subject: [PATCH 3/4] always define _GNU_SOURCE for linux
+
+We are using various extenstions that the spec say depends on _GNU_SOURCE,
+for example unshare, CPU_SET, CPU_ZERO, cpu_set_t. We enable those always
+for linux and we never unset it.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ uwsgi.h | 18 +++++-------------
+ 1 file changed, 5 insertions(+), 13 deletions(-)
+
+diff --git a/uwsgi.h b/uwsgi.h
+index b3ce4f7..3131a0f 100644
+--- a/uwsgi.h
++++ b/uwsgi.h
+@@ -149,29 +149,22 @@ extern "C" {
+ #endif
+ #endif
+
++#ifdef __linux__
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+ #endif
+-#include <stdio.h>
+-#ifdef __UCLIBC__
+-#include <sched.h>
++#ifndef __USE_GNU
++#define __USE_GNU
++#endif
+ #endif
+-#undef _GNU_SOURCE
+
++#include <stdio.h>
+ #include <stdlib.h>
+ #include <stddef.h>
+ #include <signal.h>
+ #include <math.h>
+
+ #include <sys/types.h>
+-#ifdef __linux__
+-#ifndef _GNU_SOURCE
+-#define _GNU_SOURCE
+-#endif
+-#ifndef __USE_GNU
+-#define __USE_GNU
+-#endif
+-#endif
+ #include <sys/socket.h>
+ #include <net/if.h>
+ #ifdef __linux__
+@@ -179,7 +172,6 @@ extern "C" {
+ #define MSG_FASTOPEN 0x20000000
+ #endif
+ #endif
+-#undef _GNU_SOURCE
+ #include <netinet/in.h>
+
+ #include <termios.h>
+--
+1.8.5.3
+
diff --git a/main/uwsgi/0003-core-socket-move-listen-queue-size-checking-to-creat.patch b/main/uwsgi/0003-core-socket-move-listen-queue-size-checking-to-creat.patch
new file mode 100644
index 0000000000..c7ed55d04c
--- /dev/null
+++ b/main/uwsgi/0003-core-socket-move-listen-queue-size-checking-to-creat.patch
@@ -0,0 +1,65 @@
+From 51a8f31f17440702b308b15e0c9dd73255cbb572 Mon Sep 17 00:00:00 2001
+From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
+Date: Wed, 1 Jan 2014 23:55:57 +0200
+Subject: [PATCH 3/5] core/socket: move listen queue size checking to
+ create_server_socket
+
+---
+ core/socket.c | 27 +++++++++------------------
+ 1 file changed, 9 insertions(+), 18 deletions(-)
+
+diff --git a/core/socket.c b/core/socket.c
+index ee63b98..3eed477 100644
+--- a/core/socket.c
++++ b/core/socket.c
+@@ -102,6 +102,15 @@ static int create_server_socket(int domain, int type) {
+ return -1;
+ }
+ }
++
++#ifdef __linux__
++ long somaxconn = uwsgi_num_from_file("/proc/sys/net/core/somaxconn", 1);
++ if (somaxconn > 0 && uwsgi.listen_queue > somaxconn) {
++ uwsgi_log("Listen queue size is greater than the system max net.core.somaxconn (%li).\n", somaxconn);
++ uwsgi_nuclear_blast();
++ return -1;
++ }
++#endif
+ }
+
+ return serverfd;
+@@ -208,15 +217,6 @@ int bind_to_unix(char *socket_name, int listen_queue, int chmod_socket, int abst
+ return -1;
+ }
+
+-#ifdef __linux__
+- long somaxconn = uwsgi_num_from_file("/proc/sys/net/core/somaxconn", 1);
+- if (somaxconn > 0 && uwsgi.listen_queue > somaxconn) {
+- uwsgi_log("Listen queue size is greater than the system max net.core.somaxconn (%li).\n", somaxconn);
+- uwsgi_nuclear_blast();
+- return -1;
+- }
+-#endif
+-
+ if (listen(serverfd, listen_queue) != 0) {
+ uwsgi_error("listen()");
+ uwsgi_nuclear_blast();
+@@ -761,15 +761,6 @@ int bind_to_tcp(char *socket_name, int listen_queue, char *tcp_port) {
+ return -1;
+ }
+
+-#ifdef __linux__
+- long somaxconn = uwsgi_num_from_file("/proc/sys/net/core/somaxconn", 1);
+- if (somaxconn > 0 && uwsgi.listen_queue > somaxconn) {
+- uwsgi_log("Listen queue size is greater than the system max net.core.somaxconn (%li).\n", somaxconn);
+- uwsgi_nuclear_blast();
+- return -1;
+- }
+-#endif
+-
+ if (listen(serverfd, listen_queue) != 0) {
+ uwsgi_error("listen()");
+ uwsgi_nuclear_blast();
+--
+1.8.4.2
+
diff --git a/main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch b/main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch
new file mode 100644
index 0000000000..904828b43f
--- /dev/null
+++ b/main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch
@@ -0,0 +1,73 @@
+From 4f4f9b93aae55e40dc7f92e19a7e5080a06ce798 Mon Sep 17 00:00:00 2001
+From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
+Date: Thu, 2 Jan 2014 00:05:01 +0200
+Subject: [PATCH 4/5] core/socket: move SO_REUSEADDR setting to
+ create_server_socket
+
+---
+ core/socket.c | 21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+diff --git a/core/socket.c b/core/socket.c
+index 3eed477..6d5d7d7 100644
+--- a/core/socket.c
++++ b/core/socket.c
+@@ -84,6 +84,15 @@ static int create_server_socket(int domain, int type) {
+ return -1;
+ }
+
++ if (domain != AF_UNIX) {
++ int reuse = 1;
++ if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) {
++ uwsgi_error("SO_REUSEADDR setsockopt()");
++ uwsgi_nuclear_blast();
++ return -1;
++ }
++ }
++
+ if (type == SOCK_STREAM) {
+ if (uwsgi.so_sndbuf) {
+ socklen_t sndbuf = (socklen_t) uwsgi.so_sndbuf;
+@@ -248,7 +257,6 @@ int bind_to_udp(char *socket_name, int multicast, int broadcast) {
+ struct sockaddr_in uws_addr;
+ char *udp_port;
+ int bcast = 1;
+- int reuse = 1;
+
+ struct ip_mreq mc;
+
+@@ -296,10 +304,6 @@ int bind_to_udp(char *socket_name, int multicast, int broadcast) {
+ serverfd = create_server_socket(AF_INET, SOCK_DGRAM);
+ if (serverfd < 0) return -1;
+
+- if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) {
+- uwsgi_error("setsockopt()");
+- }
+-
+ if (multicast) {
+ // if multicast is enabled remember to bind to INADDR_ANY
+ uws_addr.sin_addr.s_addr = INADDR_ANY;
+@@ -651,7 +655,6 @@ int bind_to_tcp(char *socket_name, int listen_queue, char *tcp_port) {
+ #else
+ struct sockaddr_in uws_addr;
+ #endif
+- int reuse = 1;
+ int family = AF_INET;
+ socklen_t addr_len = sizeof(struct sockaddr_in);
+
+@@ -672,12 +675,6 @@ int bind_to_tcp(char *socket_name, int listen_queue, char *tcp_port) {
+ serverfd = create_server_socket(family, SOCK_STREAM);
+ if (serverfd < 0) return -1;
+
+- if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) {
+- uwsgi_error("SO_REUSEADDR setsockopt()");
+- uwsgi_nuclear_blast();
+- return -1;
+- }
+-
+ #ifdef __linux__
+ #ifndef IP_FREEBIND
+ #define IP_FREEBIND 15
+--
+1.8.4.2
+
diff --git a/main/uwsgi/0004-define-WAIT_ANY-if-missing.patch b/main/uwsgi/0004-define-WAIT_ANY-if-missing.patch
new file mode 100644
index 0000000000..1281752111
--- /dev/null
+++ b/main/uwsgi/0004-define-WAIT_ANY-if-missing.patch
@@ -0,0 +1,34 @@
+From 393de27d01710718ffedf46cbbe20c5a1d559c9e Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Mon, 10 Feb 2014 13:15:07 +0000
+Subject: [PATCH 4/4] define WAIT_ANY if missing
+
+POSIX uses -1 and does not define WAIT_ANY so we need to define it if
+needed.
+
+See:
+http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html
+http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_wait.h.html
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ uwsgi.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/uwsgi.h b/uwsgi.h
+index 3131a0f..7a0d93e 100644
+--- a/uwsgi.h
++++ b/uwsgi.h
+@@ -257,6 +257,9 @@ extern int pivot_root(const char *new_root, const char *put_old);
+ #include <stdint.h>
+
+ #include <sys/wait.h>
++#ifndef WAIT_ANY
++#define WAIT_ANY (-1)
++#endif
+
+ #ifdef __APPLE__
+ #ifndef MAC_OS_X_VERSION_MIN_REQUIRED
+--
+1.8.5.3
+
diff --git a/main/uwsgi/0005-option-for-closing-server-sockets-when-spawning.patch b/main/uwsgi/0005-option-for-closing-server-sockets-when-spawning.patch
new file mode 100644
index 0000000000..b91f1d62ed
--- /dev/null
+++ b/main/uwsgi/0005-option-for-closing-server-sockets-when-spawning.patch
@@ -0,0 +1,70 @@
+From de160406dbe358fb599eb8343e82f18252247a19 Mon Sep 17 00:00:00 2001
+From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
+Date: Wed, 1 Jan 2014 03:51:56 +0200
+Subject: [PATCH 5/5] option for closing server sockets when spawning
+
+If server fd is not closed, it is not possible to restart uwsgi if the
+spawned process is still running as it keeps the address/port bound.
+---
+ core/master_utils.c | 1 +
+ core/socket.c | 3 +++
+ core/uwsgi.c | 3 ++-
+ uwsgi.h | 2 ++
+ 4 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/core/master_utils.c b/core/master_utils.c
+index 89151a0..6316209 100644
+--- a/core/master_utils.c
++++ b/core/master_utils.c
+@@ -407,6 +407,7 @@ void uwsgi_reload(char **argv) {
+ /* check fd table (a module can obviosly open some fd on initialization...) */
+ uwsgi_log("closing all non-uwsgi socket fds > 2 (max_fd = %d)...\n", (int) uwsgi.max_fd);
+ for (i = 3; i < (int) uwsgi.max_fd; i++) {
++ fcntl(i, F_SETFD, 0);
+
+ if (uwsgi_fd_is_safe(i)) continue;
+
+diff --git a/core/socket.c b/core/socket.c
+index 6d5d7d7..8b66a47 100644
+--- a/core/socket.c
++++ b/core/socket.c
+@@ -84,6 +84,9 @@ static int create_server_socket(int domain, int type) {
+ return -1;
+ }
+
++ if (uwsgi.close_on_exec2 && fcntl(serverfd, F_SETFD, FD_CLOEXEC) < 0)
++ uwsgi_error("fcntl()");
++
+ if (domain != AF_UNIX) {
+ int reuse = 1;
+ if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) {
+diff --git a/core/uwsgi.c b/core/uwsgi.c
+index 51821bc..d3d6538 100644
+--- a/core/uwsgi.c
++++ b/core/uwsgi.c
+@@ -871,7 +871,8 @@ static struct uwsgi_option uwsgi_base_options[] = {
+ {"disable-sendfile", no_argument, 0, "disable sendfile() and rely on boring read()/write()", uwsgi_opt_true, &uwsgi.disable_sendfile, 0},
+
+ {"check-cache", optional_argument, 0, "check for response data in the specified cache (empty for default cache)", uwsgi_opt_set_str, &uwsgi.use_check_cache, 0},
+- {"close-on-exec", no_argument, 0, "set close-on-exec on sockets (could be required for spawning processes in requests)", uwsgi_opt_true, &uwsgi.close_on_exec, 0},
++ {"close-on-exec", no_argument, 0, "set close-on-exec on connection sockets (could be required for spawning processes in requests)", uwsgi_opt_true, &uwsgi.close_on_exec, 0},
++ {"close-on-exec2", no_argument, 0, "set close-on-exec on server sockets (could be required for spawning processes in requests)", uwsgi_opt_true, &uwsgi.close_on_exec2, 0},
+ {"mode", required_argument, 0, "set uWSGI custom mode", uwsgi_opt_set_str, &uwsgi.mode, 0},
+ {"env", required_argument, 0, "set environment variable", uwsgi_opt_set_env, NULL, 0},
+ {"envdir", required_argument, 0, "load a daemontools compatible envdir", uwsgi_opt_add_string_list, &uwsgi.envdirs, 0},
+diff --git a/uwsgi.h b/uwsgi.h
+index 29dfc2d..ccb41d4 100644
+--- a/uwsgi.h
++++ b/uwsgi.h
+@@ -2516,6 +2516,8 @@ struct uwsgi_server {
+ void (*gbcw_hook) (void);
+
+ int close_on_exec;
++ int close_on_exec2;
++
+ int tcp_nodelay;
+
+ char *loop;
+--
+1.8.4.2
+
diff --git a/testing/uwsgi/APKBUILD b/main/uwsgi/APKBUILD
index 531daec308..531daec308 100644
--- a/testing/uwsgi/APKBUILD
+++ b/main/uwsgi/APKBUILD
diff --git a/main/uwsgi/musl-fix-python.patch b/main/uwsgi/musl-fix-python.patch
new file mode 100644
index 0000000000..b4b8fd240f
--- /dev/null
+++ b/main/uwsgi/musl-fix-python.patch
@@ -0,0 +1,13 @@
+diff --git a/plugins/python/uwsgi_python.h b/plugins/python/uwsgi_python.h
+index 0c5c1c8..5c0dc6d 100644
+--- a/plugins/python/uwsgi_python.h
++++ b/plugins/python/uwsgi_python.h
+@@ -1,4 +1,8 @@
+ #include <uwsgi.h>
++/* seems like Python.h explicitlyl redefines _GNU_SOURCE */
++#ifdef _GNU_SOURCE
++#undef _GNU_SOURCE
++#endif
+ #include <Python.h>
+
+ #include <frameobject.h>
diff --git a/testing/uwsgi/uwsgi.confd b/main/uwsgi/uwsgi.confd
index 7759361981..7759361981 100644
--- a/testing/uwsgi/uwsgi.confd
+++ b/main/uwsgi/uwsgi.confd
diff --git a/testing/uwsgi/uwsgi.initd b/main/uwsgi/uwsgi.initd
index 15ae1a8a90..15ae1a8a90 100644
--- a/testing/uwsgi/uwsgi.initd
+++ b/main/uwsgi/uwsgi.initd