]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5332 --resolve
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 22 Apr 2013 18:25:54 +0000 (13:25 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Mon, 22 Apr 2013 18:25:54 +0000 (13:25 -0500)
src/switch.c
src/switch_core.c

index 1efd8d31ff53ab2e7bdcf9102a4c18055ebe03be..a981fd662f3f94e9cd052aaa969ee6d85e19a268 100644 (file)
@@ -947,12 +947,9 @@ int main(int argc, char *argv[])
                        char buf[1024] = "";
                        int i = 0;
 
-                       fprintf(stderr, "Error: stacksize %d is not optimal: run ulimit -s %d from your shell before starting the application.\nauto-adjusting stack size for optimal performance...\n",
-                                       (int) (rlp.rlim_cur / 1024), SWITCH_THREAD_STACKSIZE / 1024);
-
                        memset(&rlp, 0, sizeof(rlp));
                        rlp.rlim_cur = SWITCH_THREAD_STACKSIZE;
-                       rlp.rlim_max = SWITCH_THREAD_STACKSIZE;
+                       rlp.rlim_max = SWITCH_SYSTEM_THREAD_STACKSIZE;
                        setrlimit(RLIMIT_STACK, &rlp);
 
                        apr_terminate();
index dfe43e8fcf6daf3b7d056aa7f5cdfc71a44a858f..d93aac78a7d04a2f75901af4384d8e24b6a2b198 100644 (file)
@@ -2635,16 +2635,20 @@ static void *SWITCH_THREAD_FUNC system_thread(switch_thread_t *thread, void *obj
 {
        struct system_thread_handle *sth = (struct system_thread_handle *) obj;
 
-#if 0                                                  // if we are a luser we can never turn this back down, didn't we already set the stack size?
 #if defined(HAVE_SETRLIMIT) && !defined(__FreeBSD__)
        struct rlimit rlim;
+       struct rlimit rlim_save;
 
-       rlim.rlim_cur = SWITCH_SYSTEM_THREAD_STACKSIZE;
-       rlim.rlim_max = SWITCH_SYSTEM_THREAD_STACKSIZE;
+       memset(&rlim, 0, sizeof(rlim));
+       getrlimit(RLIMIT_STACK, &rlim);
+
+       memset(&rlim_save, 0, sizeof(rlim_save));
+       getrlimit(RLIMIT_STACK, &rlim_save);
+
+       rlim.rlim_cur = rlim.rlim_max;
        if (setrlimit(RLIMIT_STACK, &rlim) < 0) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Setting stack size failed! (%s)\n", strerror(errno));
        }
-#endif
 #endif
 
        if (sth->fds) {
@@ -2653,14 +2657,10 @@ static void *SWITCH_THREAD_FUNC system_thread(switch_thread_t *thread, void *obj
 
        sth->ret = system(sth->cmd);
 
-#if 0
 #if defined(HAVE_SETRLIMIT) && !defined(__FreeBSD__)
-       rlim.rlim_cur = SWITCH_THREAD_STACKSIZE;
-       rlim.rlim_max = SWITCH_SYSTEM_THREAD_STACKSIZE;
-       if (setrlimit(RLIMIT_STACK, &rlim) < 0) {
+       if (setrlimit(RLIMIT_STACK, &rlim_save) < 0) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Setting stack size failed! (%s)\n", strerror(errno));
        }
-#endif
 #endif
 
        switch_mutex_lock(sth->mutex);
@@ -2783,6 +2783,10 @@ static int switch_system_fork(const char *cmd, switch_bool_t wait)
 {
        int pid;
        char *dcmd = strdup(cmd);
+#if defined(HAVE_SETRLIMIT) && !defined(__FreeBSD__)
+       struct rlimit rlim;
+       struct rlimit rlim_save;
+#endif
 
        switch_core_set_signal_handlers();
 
@@ -2795,7 +2799,20 @@ static int switch_system_fork(const char *cmd, switch_bool_t wait)
                free(dcmd);
        } else {
                switch_close_extra_files(NULL, 0);
-               
+
+#if defined(HAVE_SETRLIMIT) && !defined(__FreeBSD__)
+               memset(&rlim, 0, sizeof(rlim));
+               getrlimit(RLIMIT_STACK, &rlim);
+
+               memset(&rlim_save, 0, sizeof(rlim_save));
+               getrlimit(RLIMIT_STACK, &rlim_save);
+
+               rlim.rlim_cur = rlim.rlim_max;
+               if (setrlimit(RLIMIT_STACK, &rlim) < 0) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Setting stack size failed! (%s)\n", strerror(errno));
+               }
+#endif
+
                if (system(dcmd) == -1) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to execute because of a command error : %s\n", dcmd);
                }