VirtualBox

Changeset 16370 in vbox


Ignore:
Timestamp:
Jan 29, 2009 2:49:44 PM (16 years ago)
Author:
vboxsync
Message:

#3575: Increase VBoxSVC file descriptor limit for Unix platforms.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/xpcom/server.cpp

    r16267 r16370  
    6161#include <getopt.h>
    6262
    63 #ifdef RT_OS_SOLARIS
     63#ifndef RT_OS_OS2
    6464# include <sys/resource.h>
    6565#endif
     
    10511051    do
    10521052    {
    1053 #ifdef RT_OS_SOLARIS
    1054         struct rlimit lim;
    1055         if (getrlimit(RLIMIT_NOFILE, &lim) == 0)
    1056         {
    1057             if (lim.rlim_cur < 2048)
    1058             {
    1059                 lim.rlim_cur = 2048;
    1060                 if (setrlimit(RLIMIT_NOFILE, &lim) != 0)
    1061                 {
    1062                     getrlimit(RLIMIT_NOFILE, &lim);
    1063                     printf ("WARNING: failed to increase per-process file-descriptor limit to 2048.\n", lim.rlim_cur);
    1064                 }
    1065             }
    1066         }
    1067         else
    1068             printf ("WARNING: failed to obtain per-process file-descriptor limit.\n");
    1069 #endif
    1070 
    10711053        rc = com::Initialize();
    10721054        if (NS_FAILED (rc))
     
    11861168        }
    11871169
     1170#ifndef RT_OS_OS2
     1171        struct rlimit lim;
     1172        if (getrlimit(RLIMIT_NOFILE, &lim) == 0)
     1173        {
     1174            int k = 10240;
     1175            for (; k >= 2048; k -= 1024)
     1176            {
     1177                if (lim.rlim_cur < k)
     1178                {
     1179                    lim.rlim_cur = k;
     1180                    if (setrlimit(RLIMIT_NOFILE, &lim) == 0)
     1181                        break;
     1182                }
     1183                else
     1184                    break;
     1185            }
     1186            if (k <= 2048)
     1187                printf("WARNING: failed to increase file descriptor limit.\n");
     1188        }
     1189        else
     1190            printf ("WARNING: failed to obtain per-process file-descriptor limit.\n");
     1191#endif
     1192
    11881193        PLEvent *ev;
    11891194        while (gKeepRunning)
  • trunk/src/libs/xpcom18a4/ipc/ipcd/daemon/src/ipcdUnix.cpp

    r16267 r16370  
    4545#include <string.h>
    4646
    47 #ifdef RT_OS_SOLARIS
     47#ifdef RT_OS_OS2
    4848# include <sys/resource.h>
    4949#endif
     
    397397                PRFileDesc *clientFD;
    398398
     399                // @todo : We need to handle errors from accept() especially something like
     400                //          EMFILE, which happens when we run out of file descriptors.
     401                //          and puts XPCOMIPCD in a poll/accept endless loop!
    399402                clientFD = PR_Accept(listenFD, &clientAddr, PR_INTERVAL_NO_WAIT);
    400403                if (clientFD == NULL) {
     
    478481        PL_strncpyz(addr.local.path, argv[1], sizeof(addr.local.path));
    479482
    480 #ifdef RT_OS_SOLARIS
    481         struct rlimit lim;
    482         if (getrlimit(RLIMIT_NOFILE, &lim) == 0)
    483         {
    484             if (lim.rlim_cur < 2048)
    485             {
    486                 lim.rlim_cur = 2048;
    487                 if (setrlimit(RLIMIT_NOFILE, &lim) != 0)
    488                 {
    489                     getrlimit(RLIMIT_NOFILE, &lim);
    490                     printf ("WARNING: failed to increase per-process file-descriptor limit to 2048\n", lim.rlim_cur);
    491                 }
    492             }
    493         }
    494         else
    495             printf ("WARNING: failed to obtain per-process file-descriptor limit.\n");
    496 #endif
    497 
    498483#ifdef IPC_USE_FILE_LOCK
    499484    Status status = InitDaemonDir(addr.local.path);
     
    544529            IPC_NotifyParent();
    545530
     531#if defined(VBOX) && !defined(XP_OS2)
     532        struct rlimit lim;
     533        if (getrlimit(RLIMIT_NOFILE, &lim) == 0)
     534        {
     535            int k = 10240;
     536            for (; k >= 2048; k -= 1024)
     537            {
     538                if (lim.rlim_cur < k)
     539                {
     540                    lim.rlim_cur = k;
     541                    if (setrlimit(RLIMIT_NOFILE, &lim) == 0)
     542                        break;
     543                }
     544                else
     545                    break;
     546            }
     547            if (k <= 2048)
     548                printf("WARNING: failed to increase file descriptor limit.\n");
     549        }
     550        else
     551            printf ("WARNING: failed to obtain per-process file-descriptor limit.\n");
     552#endif
     553
    546554            PollLoop(listenFD);
    547555        }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette