From: Christopher Dykes Date: Thu, 31 Mar 2016 17:49:17 +0000 (-0700) Subject: Create the sys/resource.h portability header X-Git-Tag: 2016.07.26~390 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=commitdiff_plain;h=f30ed16484a692db489165ef84c2818ba035d2d8 Create the sys/resource.h portability header Summary: Windows doesn't have it, so be nice and at least stub it out. Reviewed By: yfeldblum Differential Revision: D2984232 fb-gh-sync-id: 3e8871ab78c5d7c8785a52af24548245f842f19b fbshipit-source-id: 3e8871ab78c5d7c8785a52af24548245f842f19b --- diff --git a/folly/Makefile.am b/folly/Makefile.am index 0e0357c0..44d109c3 100644 --- a/folly/Makefile.am +++ b/folly/Makefile.am @@ -279,6 +279,7 @@ nobase_follyinclude_HEADERS = \ portability/Strings.h \ portability/SysFile.h \ portability/SysMman.h \ + portability/SysResource.h \ portability/SysStat.h \ portability/SysSyscall.h \ portability/SysTime.h \ @@ -420,6 +421,7 @@ libfolly_la_SOURCES = \ portability/Strings.cpp \ portability/SysFile.cpp \ portability/SysMman.cpp \ + portability/SysResource.cpp \ portability/SysStat.cpp \ portability/SysTime.cpp \ portability/Time.cpp \ diff --git a/folly/portability/SysResource.cpp b/folly/portability/SysResource.cpp new file mode 100755 index 00000000..f5b94cc8 --- /dev/null +++ b/folly/portability/SysResource.cpp @@ -0,0 +1,45 @@ +/* + * Copyright 2016 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#ifdef _WIN32 +#include + +extern "C" { +int getrlimit(int type, rlimit* dst) { + if (type == RLIMIT_STACK) { + NT_TIB* tib = (NT_TIB*)NtCurrentTeb(); + dst->rlim_cur = (size_t)tib->StackBase - (size_t)tib->StackLimit; + dst->rlim_max = dst->rlim_cur; + return 0; + } + return -1; +} + +int getrusage(int who, rusage* usage) { + // You get NOTHING! Good day to you sir. + ZeroMemory(usage, sizeof(rusage)); + return 0; +} + +int setrlimit(int type, rlimit* src) { + // Do nothing for setting them for now. + // We couldn't set the stack size at runtime even if we wanted to. + return 0; +} +} +#endif diff --git a/folly/portability/SysResource.h b/folly/portability/SysResource.h new file mode 100755 index 00000000..c82d9337 --- /dev/null +++ b/folly/portability/SysResource.h @@ -0,0 +1,66 @@ +/* + * Copyright 2016 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#ifndef _WIN32 +#include +#else +#include + +#include + +#define RLIMIT_CORE 0 +#define RLIMIT_NOFILE 0 +#define RLIMIT_DATA 0 +#define RLIMIT_STACK 3 +#define RLIM_INFINITY SIZE_MAX + +#define RUSAGE_SELF 0 +#define RUSAGE_CHILDREN 0 +#define RUSAGE_THREAD 0 + +using rlim_t = size_t; +struct rlimit { + rlim_t rlim_cur; + rlim_t rlim_max; +}; + +struct rusage { + timeval ru_utime; + timeval ru_stime; + long ru_maxrss; + long ru_ixrss; + long ru_idrss; + long ru_isrss; + long ru_minflt; + long ru_majflt; + long ru_nswap; + long ru_inblock; + long ru_oublock; + long ru_msgsnd; + long ru_msgrcv; + long ru_nsignals; + long ru_nvcsw; + long ru_nivcsw; +}; + +extern "C" { +int getrlimit(int type, rlimit* dst); +int getrusage(int who, rusage* usage); +int setrlimit(int type, rlimit* src); +} +#endif