| author | |
| committer | |
| log | 36b6e95aa3638fa8449526f68e46bc86d4b22e5c |
| tree | 5c1041e8ca7a6ddca8161e27a6ba36e10ed3380c |
| parent | bb75f5d29709c7593dfe7269f70515919ff25c74 |
| parent | d7c770fb7f071543c21d91dc2d01f01df81f0cf6 |
| signature |
Fix rlimit_resource for MIPS and SPARC4 files changed, 179 insertions(+), 44 deletions(-)
lib/std/os/linux.zig+46-43| ... | @@ -4197,65 +4197,68 @@ pub const ifreq = extern struct { | ... | @@ -4197,65 +4197,68 @@ pub const ifreq = extern struct { |
| 4197 | }; | 4197 | }; |
| 4198 | 4198 | ||
| 4199 | // doc comments copied from musl | 4199 | // doc comments copied from musl |
| 4200 | pub const rlimit_resource = enum(c_int) { | 4200 | pub const rlimit_resource = if (native_arch.isMIPS() or native_arch.isSPARC()) |
| 4201 | /// Per-process CPU limit, in seconds. | 4201 | arch_bits.rlimit_resource |
| 4202 | CPU, | 4202 | else |
| 4203 | enum(c_int) { | ||
| 4204 | /// Per-process CPU limit, in seconds. | ||
| 4205 | CPU, | ||
| 4203 | 4206 | ||
| 4204 | /// Largest file that can be created, in bytes. | 4207 | /// Largest file that can be created, in bytes. |
| 4205 | FSIZE, | 4208 | FSIZE, |
| 4206 | 4209 | ||
| 4207 | /// Maximum size of data segment, in bytes. | 4210 | /// Maximum size of data segment, in bytes. |
| 4208 | DATA, | 4211 | DATA, |
| 4209 | 4212 | ||
| 4210 | /// Maximum size of stack segment, in bytes. | 4213 | /// Maximum size of stack segment, in bytes. |
| 4211 | STACK, | 4214 | STACK, |
| 4212 | 4215 | ||
| 4213 | /// Largest core file that can be created, in bytes. | 4216 | /// Largest core file that can be created, in bytes. |
| 4214 | CORE, | 4217 | CORE, |
| 4215 | 4218 | ||
| 4216 | /// Largest resident set size, in bytes. | 4219 | /// Largest resident set size, in bytes. |
| 4217 | /// This affects swapping; processes that are exceeding their | 4220 | /// This affects swapping; processes that are exceeding their |
| 4218 | /// resident set size will be more likely to have physical memory | 4221 | /// resident set size will be more likely to have physical memory |
| 4219 | /// taken from them. | 4222 | /// taken from them. |
| 4220 | RSS, | 4223 | RSS, |
| 4221 | 4224 | ||
| 4222 | /// Number of processes. | 4225 | /// Number of processes. |
| 4223 | NPROC, | 4226 | NPROC, |
| 4224 | 4227 | ||
| 4225 | /// Number of open files. | 4228 | /// Number of open files. |
| 4226 | NOFILE, | 4229 | NOFILE, |
| 4227 | 4230 | ||
| 4228 | /// Locked-in-memory address space. | 4231 | /// Locked-in-memory address space. |
| 4229 | MEMLOCK, | 4232 | MEMLOCK, |
| 4230 | 4233 | ||
| 4231 | /// Address space limit. | 4234 | /// Address space limit. |
| 4232 | AS, | 4235 | AS, |
| 4233 | 4236 | ||
| 4234 | /// Maximum number of file locks. | 4237 | /// Maximum number of file locks. |
| 4235 | LOCKS, | 4238 | LOCKS, |
| 4236 | 4239 | ||
| 4237 | /// Maximum number of pending signals. | 4240 | /// Maximum number of pending signals. |
| 4238 | SIGPENDING, | 4241 | SIGPENDING, |
| 4239 | 4242 | ||
| 4240 | /// Maximum bytes in POSIX message queues. | 4243 | /// Maximum bytes in POSIX message queues. |
| 4241 | MSGQUEUE, | 4244 | MSGQUEUE, |
| 4242 | 4245 | ||
| 4243 | /// Maximum nice priority allowed to raise to. | 4246 | /// Maximum nice priority allowed to raise to. |
| 4244 | /// Nice levels 19 .. -20 correspond to 0 .. 39 | 4247 | /// Nice levels 19 .. -20 correspond to 0 .. 39 |
| 4245 | /// values of this resource limit. | 4248 | /// values of this resource limit. |
| 4246 | NICE, | 4249 | NICE, |
| 4247 | 4250 | ||
| 4248 | /// Maximum realtime priority allowed for non-priviledged | 4251 | /// Maximum realtime priority allowed for non-priviledged |
| 4249 | /// processes. | 4252 | /// processes. |
| 4250 | RTPRIO, | 4253 | RTPRIO, |
| 4251 | 4254 | ||
| 4252 | /// Maximum CPU time in µs that a process scheduled under a real-time | 4255 | /// Maximum CPU time in µs that a process scheduled under a real-time |
| 4253 | /// scheduling policy may consume without making a blocking system | 4256 | /// scheduling policy may consume without making a blocking system |
| 4254 | /// call before being forcibly descheduled. | 4257 | /// call before being forcibly descheduled. |
| 4255 | RTTIME, | 4258 | RTTIME, |
| 4256 | 4259 | ||
| 4257 | _, | 4260 | _, |
| 4258 | }; | 4261 | }; |
| 4259 | 4262 | ||
| 4260 | pub const rlim_t = u64; | 4263 | pub const rlim_t = u64; |
| 4261 | 4264 |
lib/std/os/linux/mips.zig+60| ... | @@ -769,3 +769,63 @@ pub const timezone = extern struct { | ... | @@ -769,3 +769,63 @@ pub const timezone = extern struct { |
| 769 | }; | 769 | }; |
| 770 | 770 | ||
| 771 | pub const Elf_Symndx = u32; | 771 | pub const Elf_Symndx = u32; |
| 772 | |||
| 773 | pub const rlimit_resource = enum(c_int) { | ||
| 774 | /// Per-process CPU limit, in seconds. | ||
| 775 | CPU, | ||
| 776 | |||
| 777 | /// Largest file that can be created, in bytes. | ||
| 778 | FSIZE, | ||
| 779 | |||
| 780 | /// Maximum size of data segment, in bytes. | ||
| 781 | DATA, | ||
| 782 | |||
| 783 | /// Maximum size of stack segment, in bytes. | ||
| 784 | STACK, | ||
| 785 | |||
| 786 | /// Largest core file that can be created, in bytes. | ||
| 787 | CORE, | ||
| 788 | |||
| 789 | /// Number of open files. | ||
| 790 | NOFILE, | ||
| 791 | |||
| 792 | /// Address space limit. | ||
| 793 | AS, | ||
| 794 | |||
| 795 | /// Largest resident set size, in bytes. | ||
| 796 | /// This affects swapping; processes that are exceeding their | ||
| 797 | /// resident set size will be more likely to have physical memory | ||
| 798 | /// taken from them. | ||
| 799 | RSS, | ||
| 800 | |||
| 801 | /// Number of processes. | ||
| 802 | NPROC, | ||
| 803 | |||
| 804 | /// Locked-in-memory address space. | ||
| 805 | MEMLOCK, | ||
| 806 | |||
| 807 | /// Maximum number of file locks. | ||
| 808 | LOCKS, | ||
| 809 | |||
| 810 | /// Maximum number of pending signals. | ||
| 811 | SIGPENDING, | ||
| 812 | |||
| 813 | /// Maximum bytes in POSIX message queues. | ||
| 814 | MSGQUEUE, | ||
| 815 | |||
| 816 | /// Maximum nice priority allowed to raise to. | ||
| 817 | /// Nice levels 19 .. -20 correspond to 0 .. 39 | ||
| 818 | /// values of this resource limit. | ||
| 819 | NICE, | ||
| 820 | |||
| 821 | /// Maximum realtime priority allowed for non-priviledged | ||
| 822 | /// processes. | ||
| 823 | RTPRIO, | ||
| 824 | |||
| 825 | /// Maximum CPU time in µs that a process scheduled under a real-time | ||
| 826 | /// scheduling policy may consume without making a blocking system | ||
| 827 | /// call before being forcibly descheduled. | ||
| 828 | RTTIME, | ||
| 829 | |||
| 830 | _, | ||
| 831 | }; |
lib/std/os/linux/sparc64.zig+60| ... | @@ -828,3 +828,63 @@ pub const ucontext_t = extern struct { | ... | @@ -828,3 +828,63 @@ pub const ucontext_t = extern struct { |
| 828 | stack: stack_t, | 828 | stack: stack_t, |
| 829 | sigmask: sigset_t, | 829 | sigmask: sigset_t, |
| 830 | }; | 830 | }; |
| 831 | |||
| 832 | pub const rlimit_resource = enum(c_int) { | ||
| 833 | /// Per-process CPU limit, in seconds. | ||
| 834 | CPU, | ||
| 835 | |||
| 836 | /// Largest file that can be created, in bytes. | ||
| 837 | FSIZE, | ||
| 838 | |||
| 839 | /// Maximum size of data segment, in bytes. | ||
| 840 | DATA, | ||
| 841 | |||
| 842 | /// Maximum size of stack segment, in bytes. | ||
| 843 | STACK, | ||
| 844 | |||
| 845 | /// Largest core file that can be created, in bytes. | ||
| 846 | CORE, | ||
| 847 | |||
| 848 | /// Largest resident set size, in bytes. | ||
| 849 | /// This affects swapping; processes that are exceeding their | ||
| 850 | /// resident set size will be more likely to have physical memory | ||
| 851 | /// taken from them. | ||
| 852 | RSS, | ||
| 853 | |||
| 854 | /// Number of open files. | ||
| 855 | NOFILE, | ||
| 856 | |||
| 857 | /// Number of processes. | ||
| 858 | NPROC, | ||
| 859 | |||
| 860 | /// Locked-in-memory address space. | ||
| 861 | MEMLOCK, | ||
| 862 | |||
| 863 | /// Address space limit. | ||
| 864 | AS, | ||
| 865 | |||
| 866 | /// Maximum number of file locks. | ||
| 867 | LOCKS, | ||
| 868 | |||
| 869 | /// Maximum number of pending signals. | ||
| 870 | SIGPENDING, | ||
| 871 | |||
| 872 | /// Maximum bytes in POSIX message queues. | ||
| 873 | MSGQUEUE, | ||
| 874 | |||
| 875 | /// Maximum nice priority allowed to raise to. | ||
| 876 | /// Nice levels 19 .. -20 correspond to 0 .. 39 | ||
| 877 | /// values of this resource limit. | ||
| 878 | NICE, | ||
| 879 | |||
| 880 | /// Maximum realtime priority allowed for non-priviledged | ||
| 881 | /// processes. | ||
| 882 | RTPRIO, | ||
| 883 | |||
| 884 | /// Maximum CPU time in µs that a process scheduled under a real-time | ||
| 885 | /// scheduling policy may consume without making a blocking system | ||
| 886 | /// call before being forcibly descheduled. | ||
| 887 | RTTIME, | ||
| 888 | |||
| 889 | _, | ||
| 890 | }; |
lib/std/os/test.zig+13-1| ... | @@ -694,7 +694,19 @@ test "getrlimit and setrlimit" { | ... | @@ -694,7 +694,19 @@ test "getrlimit and setrlimit" { |
| 694 | inline for (std.meta.fields(os.rlimit_resource)) |field| { | 694 | inline for (std.meta.fields(os.rlimit_resource)) |field| { |
| 695 | const resource = @intToEnum(os.rlimit_resource, field.value); | 695 | const resource = @intToEnum(os.rlimit_resource, field.value); |
| 696 | const limit = try os.getrlimit(resource); | 696 | const limit = try os.getrlimit(resource); |
| 697 | try os.setrlimit(resource, limit); | 697 | |
| 698 | // On 32 bit MIPS musl includes a fix which changes limits greater than -1UL/2 to RLIM_INFINITY. | ||
| 699 | // See http://git.musl-libc.org/cgit/musl/commit/src/misc/getrlimit.c?id=8258014fd1e34e942a549c88c7e022a00445c352 | ||
| 700 | // | ||
| 701 | // This happens for example if RLIMIT_MEMLOCK is bigger than ~2GiB. | ||
| 702 | // In that case the following the limit would be RLIM_INFINITY and the following setrlimit fails with EPERM. | ||
| 703 | if (comptime builtin.cpu.arch.isMIPS() and builtin.link_libc) { | ||
| 704 | if (limit.cur != os.linux.RLIM.INFINITY) { | ||
| 705 | try os.setrlimit(resource, limit); | ||
| 706 | } | ||
| 707 | } else { | ||
| 708 | try os.setrlimit(resource, limit); | ||
| 709 | } | ||
| 698 | } | 710 | } |
| 699 | } | 711 | } |
| 700 | 712 |