From 4fb5a8437873d65a50a4296d49be345398c04301 Mon Sep 17 00:00:00 2001 From: "roberto@debian32" Date: Tue, 25 Oct 2011 17:35:52 +0200 Subject: [PATCH] improved multi-mule support --- master_utils.c | 2 ++ mule.c | 3 ++- plugins/python/uwsgi_pymodule.c | 6 +++++- uwsgi.c | 8 ++++++++ uwsgi.h | 1 + 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/master_utils.c b/master_utils.c index 496f2457..e3ec7a74 100644 --- a/master_utils.c +++ b/master_utils.c @@ -59,8 +59,10 @@ void uwsgi_fixup_fds(int wid, int muleid) { #endif if (uwsgi.shared->mule_signal_pipe[0] != -1) close(uwsgi.shared->mule_signal_pipe[0]); + if (muleid == 0) { if (uwsgi.shared->mule_signal_pipe[1] != -1) close(uwsgi.shared->mule_signal_pipe[1]); + if (uwsgi.shared->mule_queue_pipe[1] != -1) close(uwsgi.shared->mule_queue_pipe[1]); } for(i=0;imule_queue_pipe[1]); uwsgi_mule_add_farm_to_queue(mule_queue); @@ -158,7 +159,7 @@ void uwsgi_mule_handler() { uwsgi_log_verbose("error managing signal %d on mule %d\n", uwsgi_signal, uwsgi.mywid); } } - else if (interesting_fd == uwsgi.mules[uwsgi.muleid-1].queue_pipe[1] || farm_has_msg(interesting_fd)) { + else if (interesting_fd == uwsgi.mules[uwsgi.muleid-1].queue_pipe[1] || interesting_fd == uwsgi.shared->mule_queue_pipe[1] || farm_has_msg(interesting_fd)) { len = read(interesting_fd, message, 65536); if (len < 0) { uwsgi_error("read()"); diff --git a/plugins/python/uwsgi_pymodule.c b/plugins/python/uwsgi_pymodule.c index 64acb839..69e0dc07 100644 --- a/plugins/python/uwsgi_pymodule.c +++ b/plugins/python/uwsgi_pymodule.c @@ -1153,7 +1153,7 @@ PyObject *py_uwsgi_mule_msg(PyObject * self, PyObject * args) { char *message = NULL; Py_ssize_t message_len = 0; - int mule_id = 1; + int mule_id = 0; ssize_t len; if (!PyArg_ParseTuple(args, "s#|i:mule_msg", &message, &message_len, &mule_id)) { @@ -1161,6 +1161,10 @@ PyObject *py_uwsgi_mule_msg(PyObject * self, PyObject * args) { } if (mule_id == 0) { + len = write(uwsgi.shared->mule_queue_pipe[0], message, message_len); + if (len <= 0) { + uwsgi_error("write()"); + } } else if (mule_id > 0 && mule_id <= uwsgi.mules_cnt) { len = write(uwsgi.mules[mule_id-1].queue_pipe[0], message, message_len); diff --git a/uwsgi.c b/uwsgi.c index f8bda33c..5fc0d244 100644 --- a/uwsgi.c +++ b/uwsgi.c @@ -1021,6 +1021,9 @@ int main(int argc, char *argv[], char *envp[]) { uwsgi.shared->mule_signal_pipe[0] = -1; uwsgi.shared->mule_signal_pipe[1] = -1; + uwsgi.shared->mule_queue_pipe[0] = -1; + uwsgi.shared->mule_queue_pipe[1] = -1; + uwsgi.mime_file = "/etc/mime.types"; @@ -2250,6 +2253,11 @@ skipzero: exit(1); } + if (socketpair(AF_UNIX, SOCK_DGRAM, 0, uwsgi.shared->mule_queue_pipe)) { + uwsgi_error("socketpair()"); + exit(1); + } + for(i=0;i