commit
						36ebacbe10
					
				@ -17,6 +17,7 @@ ethcore-util = { path = "util" }
 | 
			
		||||
ethcore = { path = "ethcore" }
 | 
			
		||||
ethsync = { path = "sync" }
 | 
			
		||||
ethcore-rpc = { path = "rpc", optional = true }
 | 
			
		||||
fdlimit = { path = "util/fdlimit" }
 | 
			
		||||
 | 
			
		||||
[features]
 | 
			
		||||
default = ["rpc"]
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ extern crate ethsync;
 | 
			
		||||
extern crate log as rlog;
 | 
			
		||||
extern crate env_logger;
 | 
			
		||||
extern crate ctrlc;
 | 
			
		||||
extern crate fdlimit;
 | 
			
		||||
 | 
			
		||||
#[cfg(feature = "rpc")]
 | 
			
		||||
extern crate ethcore_rpc as rpc;
 | 
			
		||||
@ -95,6 +96,7 @@ fn main() {
 | 
			
		||||
	let args: Args = Args::docopt().decode().unwrap_or_else(|e| e.exit());
 | 
			
		||||
 | 
			
		||||
	setup_log(&args.flag_logging);
 | 
			
		||||
	unsafe { ::fdlimit::raise_fd_limit(); }
 | 
			
		||||
 | 
			
		||||
	let spec = ethereum::new_frontier();
 | 
			
		||||
	let init_nodes = match args.arg_enode.len() {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								util/fdlimit/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								util/fdlimit/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
[package]
 | 
			
		||||
description = "Utility function to raise file descriptor limit on OS X"
 | 
			
		||||
homepage = "http://ethcore.io"
 | 
			
		||||
license = "GPL-3.0"
 | 
			
		||||
name = "fdlimit"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
authors = ["Ethcore <admin@ethcore.io>"]
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
libc = "0.2"
 | 
			
		||||
							
								
								
									
										18
									
								
								util/fdlimit/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								util/fdlimit/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
// Copyright 2015, 2016 Ethcore (UK) Ltd.
 | 
			
		||||
// This file is part of Parity.
 | 
			
		||||
// 
 | 
			
		||||
// Parity is free software: you can redistribute it and/or modify
 | 
			
		||||
// it under the terms of the GNU General Public License as published by
 | 
			
		||||
// the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
// (at your option) any later version.
 | 
			
		||||
// 
 | 
			
		||||
// Parity is distributed in the hope that it will be useful,
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
// GNU General Public License for more details.
 | 
			
		||||
// 
 | 
			
		||||
// You should have received a copy of the GNU General Public License
 | 
			
		||||
// along with Parity.  If not, see <http://www.gnu.org/licenses/>.extern crate libc;
 | 
			
		||||
extern crate libc;
 | 
			
		||||
pub mod raise_fd_limit;
 | 
			
		||||
pub use raise_fd_limit::raise_fd_limit;
 | 
			
		||||
							
								
								
									
										61
									
								
								util/fdlimit/src/raise_fd_limit.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								util/fdlimit/src/raise_fd_limit.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,61 @@
 | 
			
		||||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
 | 
			
		||||
// file at the top-level directory of this distribution and at
 | 
			
		||||
// http://rust-lang.org/COPYRIGHT.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
 | 
			
		||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
 | 
			
		||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
 | 
			
		||||
// option. This file may not be copied, modified, or distributed
 | 
			
		||||
// except according to those terms.
 | 
			
		||||
 | 
			
		||||
/// darwin_fd_limit exists to work around an issue where launchctl on Mac OS X
 | 
			
		||||
/// defaults the rlimit maxfiles to 256/unlimited. The default soft limit of 256
 | 
			
		||||
/// ends up being far too low for our multithreaded scheduler testing, depending
 | 
			
		||||
/// on the number of cores available.
 | 
			
		||||
///
 | 
			
		||||
#[cfg(any(target_os = "macos", target_os = "ios"))]
 | 
			
		||||
#[allow(non_camel_case_types)]
 | 
			
		||||
pub unsafe fn raise_fd_limit() {
 | 
			
		||||
    use libc;
 | 
			
		||||
    use std::cmp;
 | 
			
		||||
    use std::io;
 | 
			
		||||
    use std::mem::size_of_val;
 | 
			
		||||
    use std::ptr::null_mut;
 | 
			
		||||
 | 
			
		||||
    static CTL_KERN: libc::c_int = 1;
 | 
			
		||||
    static KERN_MAXFILESPERPROC: libc::c_int = 29;
 | 
			
		||||
 | 
			
		||||
    // The strategy here is to fetch the current resource limits, read the
 | 
			
		||||
    // kern.maxfilesperproc sysctl value, and bump the soft resource limit for
 | 
			
		||||
    // maxfiles up to the sysctl value.
 | 
			
		||||
 | 
			
		||||
    // Fetch the kern.maxfilesperproc value
 | 
			
		||||
    let mut mib: [libc::c_int; 2] = [CTL_KERN, KERN_MAXFILESPERPROC];
 | 
			
		||||
    let mut maxfiles: libc::c_int = 0;
 | 
			
		||||
    let mut size: libc::size_t = size_of_val(&maxfiles) as libc::size_t;
 | 
			
		||||
    if libc::sysctl(&mut mib[0], 2, &mut maxfiles as *mut _ as *mut _, &mut size,
 | 
			
		||||
              null_mut(), 0) != 0 {
 | 
			
		||||
        let err = io::Error::last_os_error();
 | 
			
		||||
        panic!("raise_fd_limit: error calling sysctl: {}", err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch the current resource limits
 | 
			
		||||
    let mut rlim = libc::rlimit{rlim_cur: 0, rlim_max: 0};
 | 
			
		||||
    if libc::getrlimit(libc::RLIMIT_NOFILE, &mut rlim) != 0 {
 | 
			
		||||
        let err = io::Error::last_os_error();
 | 
			
		||||
        panic!("raise_fd_limit: error calling getrlimit: {}", err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Bump the soft limit to the smaller of kern.maxfilesperproc and the hard
 | 
			
		||||
    // limit
 | 
			
		||||
    rlim.rlim_cur = cmp::min(maxfiles as libc::rlim_t, rlim.rlim_max);
 | 
			
		||||
 | 
			
		||||
    // Set our newly-increased resource limit
 | 
			
		||||
    if libc::setrlimit(libc::RLIMIT_NOFILE, &rlim) != 0 {
 | 
			
		||||
        let err = io::Error::last_os_error();
 | 
			
		||||
        panic!("raise_fd_limit: error calling setrlimit: {}", err);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(not(any(target_os = "macos", target_os = "ios")))]
 | 
			
		||||
pub unsafe fn raise_fd_limit() {}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user