From f202dda5c5d9c2f8dd82c4d36c376659017eccb4 Mon Sep 17 00:00:00 2001 From: Jinyang He Date: Wed, 21 Jun 2023 10:45:42 +0800 Subject: [PATCH] Use prlimit64 in FpSetRLimit and FpSetRLimit --- rtl/linux/osdefs.inc | 1 + rtl/linux/ossysc.inc | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/rtl/linux/osdefs.inc b/rtl/linux/osdefs.inc index bed83281d3..cf9c5b4720 100644 --- a/rtl/linux/osdefs.inc +++ b/rtl/linux/osdefs.inc @@ -126,5 +126,6 @@ {$ifdef cpuloongarch64} {$define generic_linux_syscalls} {$define use_statx_syscall} + {$define use_prlimit64} {$undef usestime} {$endif cpuloongarch64} diff --git a/rtl/linux/ossysc.inc b/rtl/linux/ossysc.inc index def3d1a67c..fd1ba5d907 100644 --- a/rtl/linux/ossysc.inc +++ b/rtl/linux/ossysc.inc @@ -737,11 +737,23 @@ begin end; +{$ifdef USE_PRLIMIT64} +function FpPRlimit64(pid : pid_t; resource : cInt; nrlim, orlim : PRLimit) : cInt; +begin + FpPRlimit64 := do_syscall(syscall_nr_prlimit64, TSysParam(pid), + TSysParam(resource), TSysParam(nrlim), TSysParam(orlim)); +end; +{$endif} + function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt; [public, alias : 'FPC_SYSC_GETRLIMIT']; begin {$ifndef NO_SYSCALL_GETRLIMIT} - FpGetRLimit := do_syscall(syscall_nr_getrlimit, - TSysParam(resource), TSysParam(rlim)); + {$ifndef USE_PRLIMIT64} + FpGetRLimit := do_syscall(syscall_nr_getrlimit, + TSysParam(resource), TSysParam(rlim)); + {$else} + FpGetRLimit := FpPRlimit64(0, RLIMIT_STACK, PRLimit(0), rlim); + {$endif} {$else} FpGetRLimit := do_syscall(syscall_nr_ugetrlimit, TSysParam(resource), TSysParam(rlim)); @@ -767,7 +779,11 @@ end; function FpSetRLimit(Resource:cint;rlim:PRLimit):cint; [public, alias : 'FPC_SYSC_SETRLIMIT']; begin +{$ifndef USE_PRLIMIT64} fpsetrlimit:=do_syscall(syscall_nr_setrlimit,TSysParam(Resource),TSysParam(rlim)); +{$else} + fpsetrlimit:=FpPRlimit64(0, RLIMIT_STACK, rlim, PRLimit(0)); +{$endif USE_PRLIMIT64} end; function FpSchedGetAffinity(pid : pid_t;cpusetsize : size_t;mask : pcpu_set_t) : cint;