Changeset 9797
- Timestamp:
- Dec 18, 2009, 7:05:36 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/fdlimit.c
r9629 r9797 54 54 #include <sys/resource.h> /* getrlimit */ 55 55 #endif 56 #include <fcntl.h> /* O_LARGEFILE posix_fadvise */ 56 57 #include <unistd.h> 57 #include <fcntl.h> /* O_LARGEFILE posix_fadvise */58 58 59 59 #include <evutil.h> … … 77 77 *** 78 78 **/ 79 80 enum81 {82 NOFILE_BUFFER = 512, /* the process' number of open files is83 globalMaxPeers + NOFILE_BUFFER */84 };85 79 86 80 struct tr_openfile … … 823 817 } 824 818 819 static TR_INLINE int clamp( int val, int lo, int hi ) 820 { 821 if( val < lo ) val = lo; 822 if( val > hi ) val = hi; 823 return val; 824 } 825 826 825 827 void 826 tr_fdSetPeerLimit( tr_session * session, int limit )828 tr_fdSetPeerLimit( tr_session * session, int socketLimit ) 827 829 { 828 830 struct tr_fdInfo * gFd; … … 835 837 { 836 838 struct rlimit rlim; 839 const int NOFILE_BUFFER = 512; 840 const int open_max = sysconf( _SC_OPEN_MAX ); 837 841 getrlimit( RLIMIT_NOFILE, &rlim ); 838 rlim.rlim_cur = MIN( rlim.rlim_max, (rlim_t)( limit + NOFILE_BUFFER ));842 rlim.rlim_cur = clamp( open_max, 1024, rlim.rlim_max ); 839 843 setrlimit( RLIMIT_NOFILE, &rlim ); 840 gFd->socketLimit = rlim.rlim_cur - NOFILE_BUFFER;841 844 tr_dbg( "setrlimit( RLIMIT_NOFILE, %d )", (int)rlim.rlim_cur ); 845 gFd->socketLimit = MIN( socketLimit, (int)rlim.rlim_cur - NOFILE_BUFFER ); 842 846 } 843 847 #else 844 gFd->socketLimit = limit;845 #endif 846 gFd->publicSocketLimit = limit;847 848 tr_dbg( " %d usable file descriptors", limit );848 gFd->socketLimit = socketLimit; 849 #endif 850 gFd->publicSocketLimit = socketLimit; 851 852 tr_dbg( "socket limit is %d", (int)gFd->socketLimit ); 849 853 } 850 854
Note: See TracChangeset
for help on using the changeset viewer.