Ping?

Anybody willing to review?


Thanks,
Corinna


On Jan 26 12:13, Corinna Vinschen wrote:
> From: Corinna Vinschen <[email protected]>
> 
> The only implementation of an RLIMIT using Windows job objects,
> RLIMIT_AS, doesn't really work as desired.  The way it uses nested jobs
> fails if a soft limit is supposed to be raised again, thus working
> rather like a hard limit only.
> 
> This patch series takes a new approach.
> 
> Considering two kinds of rlimits, soft and hard limits, and two kinds of
> scopes, per-process and per-user.  Especially the per-user scope is kind
> of tricky when implementing this as job objects.  For all practical
> purposes, we can only include Cygwin processes and native subprocesses
> into per-user jobs, and only Cygwin processes into per-process jobs.
> 
> So here's what this patch is doing now:
> 
> When a new Cygwin process tree is started, the root process of that tree
> creates two per-user nested jobs, one for the hard limits, the next one
> for the soft limits.  The per-user job objects are globally defined.
> Processes can become job members across multiple Windows sessions.  If
> another Cygwin process tree is started, the root process of that tree
> finds that the per-user jobs already exist and just assignes itself to
> both jobs.
> 
> The same happens after a user context switch changing the real uid, i. e.,
> in spawn/exec when calling CreateProcessAsUser.
> 
> User limits are just set in those job objects across the board.
> 
> Per-process limits are implemented by adding two more job objects for
> hard and soft limit and assigning the process to these jobs.  These job
> objects are session local and they are only created when the process
> calls setrlimit.  They are setup so that child processes breakaway from
> these jobs automatically.  The job objects are not inherited, but
> recreated on fork/exec per PID for child processes.  This localizes the
> rlimits to a process and changes to per-process rlimits in a parent
> process don't affect the per-process limits in an already started child,
> only in children forked or execed later on.
> 
> I hope I explained this sufficiently.
> 
> For the time being, we have exactly one per-process limit, RLIMIT_AS,
> and exactly one new(!) per-user limit, RLIMIT_NPROC.
> 
> Questions and comments welcome!
> 
> 
> Corinna
> 
> 
> 
> Corinna Vinschen (3):
>   Cygwin: getrlimit/setrlimit: generalize setting rlimits
>   Cygwin: getrlimit/setrlimit: implement RLIMIT_NPROC
>   Cygwin: improve PCA workaround
> 
>  winsup/cygwin/dcrt0.cc                    |   4 +
>  winsup/cygwin/fork.cc                     |  16 ++
>  winsup/cygwin/globals.cc                  |   1 +
>  winsup/cygwin/include/cygwin/version.h    |   3 +-
>  winsup/cygwin/include/sys/resource.h      |   3 +-
>  winsup/cygwin/local_includes/child_info.h |  10 +-
>  winsup/cygwin/local_includes/cygheap.h    |   1 -
>  winsup/cygwin/local_includes/ntdll.h      |   1 +
>  winsup/cygwin/resource.cc                 | 303 ++++++++++++++++++----
>  winsup/cygwin/spawn.cc                    |  44 +---
>  10 files changed, 300 insertions(+), 86 deletions(-)
> 
> -- 
> 2.52.0

Reply via email to