aboutsummaryrefslogtreecommitdiffstats
path: root/process.c
Commit message (Collapse)AuthorAgeFilesLines
* Allow Dir.home to work for non-login procs when $HOME not setAlan D. Salewski2020-05-231-2/+264
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow the 'Dir.home' method to reliably locate the user's home directory when all three of the following are true at the same time: 1. Ruby is running on a Unix-like OS 2. The $HOME environment variable is not set 3. The process is not a descendant of login(1) (or a work-alike) The prior behavior was that the lookup could only work for login-descended processes. This is accomplished by looking up the user's record in the password database by uid (getpwuid_r(3)) as a fallback to the lookup by name (getpwname_r(3)) which is still attempted first (based on the name, if any, returned by getlogin_r(3)). If getlogin_r(3), getpwnam_r(3), and/or getpwuid_r(3) is not available at compile time, will fallback on using their respective non-*_r() variants: getlogin(3), getpwnam(3), and/or getpwuid(3). The rationale for attempting to do the lookup by name prior to doing it by uid is to accommodate the possibility of multiple login names (each with its own record in the password database, so each with a potentially different home directory) being mapped to the same uid (as is explicitly allowed for by POSIX; see getlogin(3posix)). Preserves the existing behavior for login-descended processes, and adds the new capability of having Dir.home being able to find the user's home directory for non-login-descended processes. Fixes [Bug #16787] Related discussion: https://bugs.ruby-lang.org/issues/16787 https://github.com/ruby/ruby/pull/3034
* Thread scheduler for light weight concurrency.Samuel Williams2020-05-141-3/+8
|
* sed -i 's|ruby/impl|ruby/internal|'卜部昌平2020-05-111-1/+1
| | | | To fix build failures.
* sed -i s|ruby/3|ruby/impl|g卜部昌平2020-05-111-1/+1
| | | | This shall fix compile errors.
* Added more NORETURN declarationsNobuyoshi Nakada2020-05-111-3/+11
|
* Run rb_syswait on exec failureTakashi Kokubun2020-05-101-1/+1
| | | | | | | | | | | | | | | | not only when !w but also when w == WAITPID_LOCK_ONLY. See also: f7c0cc36920a4ed14a3ab1ca6cfdf18ceff1e5d5 and a2264342063260d660b99872eaf5080f6ab08e81. We thought this change was an oversight in the latter commit. Without this change, the test fails like: $ make test-all TESTS="../test/ruby/test_process.rb -n test_exec_failure_leaves_no_child" RUN_OPTS="--jit" ... 1) Failure: TestProcess#test_exec_failure_leaves_no_child [/home/k0kubun/src/github.com/ruby/ruby/test/ruby/test_process.rb:2493]: Expected [[26799, #<Process::Status: pid 26799 exit 127>]] to be empty. Co-Authored-By: Yusuke Endoh <mame@ruby-lang.org>
* internal/process.h: add a no-warning simple wrapper for fork(2)Yusuke Endoh2020-05-021-13/+3
| | | | | | | | | | | | As fork(2) is deprecated, its calls must be guarded by `COMPILER_WARNING_IGNORED(-Wdeprecated-declarations)`. All usages of fork(2) in process have been alread guarded. A new call to fork(2) was added in ruby.c with f22c4ff359498ab342e4b6d6feb21af6004ee270. This caused a build failure on Solaris 11. It may hide a bug to guard big code unnecessarily, so this change introduces a simple wrapper "rb_fork" whose definition is guarded, and replaces all calls to fork(2) with the wrapper function.
* __GNUC__ is too lax卜部昌平2020-04-211-2/+2
| | | | Ditto for 4b853932eaa7fa4acf8a0f0c9b7c695bb4f5e76d
* Preserve encoding in error messages for invalid user/group nameNobuyoshi Nakada2020-04-161-2/+2
|
* Preserve encoding in error message for invalid env exec optionNobuyoshi Nakada2020-04-161-1/+1
|
* Add a a list of cases for which clock_getres() has been observed to be ↵Benoit Daloze2020-04-131-1/+4
| | | | | | inaccurate * See [Bug #16740]
* [DOC] Fixed POSIX clock_getres(3) link [ci skip]Nobuyoshi Nakada2020-04-101-1/+1
| | | | It should not be linked to `Process.clock_getes`.
* Warn about Process#clock_getres being unreliable in documentationBenoit Daloze2020-04-101-11/+12
| | | | | | * [Bug #16740] * Remove the GETTIMEOFDAY_BASED_CLOCK_REALTIME example because the caveat applies to all clock ids, not just the Symbol clock ids.
* Suppress -Wswitch warningsNobuyoshi Nakada2020-04-081-0/+2
|
* Merge pull request #2991 from shyouhei/ruby.h卜部昌平2020-04-081-1/+1
| | | Split ruby.h
* Fixed a potential memory leakNobuyoshi Nakada2020-02-121-3/+2
| | | | `rb_str_new_cstr` can raise a `NoMemoryError`.
* Removed unnecessary conversionNobuyoshi Nakada2020-02-121-2/+0
| | | | Paths in `rb_execarg_t` should have been converted already.
* Restart timer thread even after preparation failedNobuyoshi Nakada2020-02-111-2/+9
| | | | | If the timer thread is left stopped, memory crash or segfault can happen.
* decouple internal.h headers卜部昌平2019-12-261-26/+46
| | | | | | | | | | | | | | | | | | Saves comitters' daily life by avoid #include-ing everything from internal.h to make each file do so instead. This would significantly speed up incremental builds. We take the following inclusion order in this changeset: 1. "ruby/config.h", where _GNU_SOURCE is defined (must be the very first thing among everything). 2. RUBY_EXTCONF_H if any. 3. Standard C headers, sorted alphabetically. 4. Other system headers, maybe guarded by #ifdef 5. Everything else, sorted alphabetically. Exceptions are those win32-related headers, which tend not be self- containing (headers have inclusion order dependencies).
* [DOC] Fix grammar in Process module docsMarcus Stollsteimer2019-12-241-4/+4
|
* Fixed misspellingsNobuyoshi Nakada2019-12-201-1/+1
| | | | Fixed misspellings reported at [Bug #16437], only in ruby and rubyspec.
* Kernel#abort without arguments should print error infoNobuyoshi Nakada2019-12-161-1/+1
| | | | [Bug #16424]
* delete unused codes卜部昌平2019-11-181-2/+0
| | | | Suppress compiler warnings.
* Warn on access/modify of $SAFE, and remove effects of modifying $SAFEJeremy Evans2019-11-181-12/+0
| | | | | | | | | | | | | | | | | This removes the security features added by $SAFE = 1, and warns for access or modification of $SAFE from Ruby-level, as well as warning when calling all public C functions related to $SAFE. This modifies some internal functions that took a safe level argument to no longer take the argument. rb_require_safe now warns, rb_require_string has been added as a version that takes a VALUE and does not warn. One public C function that still takes a safe level argument and that this doesn't warn for is rb_eval_cmd. We may want to consider adding an alternative method that does not take a safe level argument, and warn for rb_eval_cmd.
* Use the dedicated function `rb_io_check_io`Nobuyoshi Nakada2019-11-041-1/+1
|
* Documentation improvements for Ruby corezverok2019-10-261-2/+14
| | | | | | | | | | | * Top-level `return`; * Documentation for comments syntax; * `rescue` inside blocks; * Enhance `Object#to_enum` docs; * Make `chomp:` option more obvious for `String#each_line` and `#lines`; * Enhance `Proc#>>` and `#<<` docs; * Enhance `Processs` class docs.
* Fix potential memory leaks by `rb_imemo_tmpbuf_auto_free_pointer`Nobuyoshi Nakada2019-10-051-2/+2
| | | | | | | | | | | | | | This function has been used wrongly always at first, "allocate a buffer then wrap it with tmpbuf". This order can cause a memory leak, as tmpbuf creation also can raise a NoMemoryError exception. The right order is "create a tmpbuf then allocate&wrap a buffer". So the argument of this function is rather harmful than just useless. TODO: * Rename this function to more proper name, as it is not used "temporary" (function local) purpose. * Allocate and wrap at once safely, like `ALLOCV`.
* Remove call-seq for method that doesn't exist (#2521)Alan Wu2019-10-041-1/+0
| | | | | | | | | | | | ``` $ ruby -ve 'IO.popen("ls"){}; $?.to_int' ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18] Traceback (most recent call last): -e:1:in `<main>': undefined method `to_int' for #<Process::Status: pid 33989 SIGPIPE (signal 13)> (NoMethodError) Did you mean? to_i taint ``` Process::Status#to_int was removed at 7ba5c4e.
* Add version that FreeBSD supports `CLOCK_PROCESS_CPUTIME_ID` [ci skip]yuuji.yaginuma2019-09-051-1/+1
| | | | | | | | | Seems FreeBSD already supported `CLOCK_PROCESS_CPUTIME_ID`. That added by https://reviews.freebsd.org/rS239347 and the doc was updated by https://reviews.freebsd.org/rS315694. I confirmed `CLOCK_PROCESS_CPUTIME_ID` constant exists in 9.3.0 branch. https://github.com/freebsd/freebsd/blob/release/9.3.0/sys/sys/time.h#L269
* move docs around [ci skip]卜部昌平2019-08-291-78/+111
| | | | To properly generate documents.
* drop-in type check for rb_define_global_function卜部昌平2019-08-291-9/+26
| | | | | | We can check the function pointer passed to rb_define_global_function like we do so in rb_define_method. It turns out that almost anybody is misunderstanding the API.
* drop-in type check for rb_define_module_function卜部昌平2019-08-291-20/+44
| | | | | | We can check the function pointer passed to rb_define_module_function like how we do so in rb_define_method. The difference is that this changeset reveales lots of atiry mismatches.
* delete `$` sign from C identifiers卜部昌平2019-08-271-4/+4
| | | | | They lack portability. See also https://travis-ci.org/shyouhei/ruby/jobs/577164015
* rb_define_hooked_variable now free from ANYARGS卜部昌平2019-08-271-2/+14
| | | | | | | | | After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is dangerous and should be extinct. This commit uses rb_gvar_getter_t / rb_gvar_setter_t for rb_define_hooked_variable / rb_define_virtual_variable which revealed lots of function prototype inconsistencies. Some of them were literally decades old, going back to dda5dc00cff334cac373096d444a0fd59e716124.
* uid_t and gid_t are narrower than VALUE.卜部昌平2019-08-261-2/+4
| | | | | | | Often uid / gid are 16 bit or 32 bit integers, while VALUE are 32 to 64 bits. They tend to differ in size. Because rb_ensure expects its callbacks to take VALUE arguments, narrowing must be done by hand, otherwise data corruption can happen depending on machine ABI.
* Suppress a "clobbered" warningNobuyoshi Nakada2019-08-261-3/+1
|
* nil as the default of optional parametersNobuyoshi Nakada2019-07-161-9/+7
|
* nil as the default of optional parametersNobuyoshi Nakada2019-07-161-6/+9
|
* Moved the check for `exception` to rb_execarg_addoptNobuyoshi Nakada2019-07-161-10/+13
| | | | | | Check for `exception` option in rb_execarg_addopt, as well as other options. And then raise a particular ArgumentError if it is not allowed.
* process.c (p_sys_setregid, p_sys_setresgid): remove unused tmp bufferYusuke Endoh2019-07-151-4/+0
| | | | To suppress Coverity Scan warning
* process.c: [DOC] remove extra quotes [ci skip]nobu2019-03-301-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* process.c: [DOC] fix markups [ci skip]nobu2019-03-291-7/+8
| | | | | | * process.c (rb_f_spawn): fix markups as rdoc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67370 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* process.c: [DOC] fix markups [ci skip]nobu2019-03-291-3/+3
| | | | | | | * process.c (rb_clock_getres): fix code markups, as `+` can not include parentheses. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [DOC] fix markups [ci skip]nobu2019-03-281-69/+65
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* new constant: Process::CLOCK_TAI.akr2019-02-091-0/+5
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67042 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* process.c: [DOC] small improvementsstomar2019-01-201-3/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* mjit.c: use boolean type for boolean variablesk0kubun2019-01-101-3/+3
| | | | | | | | | | and functions to clarify the intention and make sure it's not used in a surprising way (like using 2, 3, ... other than 0, 1 even while it seems to be a boolean). This is a retry of r66775. It included some typos... git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66778 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Revert "mjit.c: use boolean type for boolean variables"k0kubun2019-01-101-3/+3
| | | | | | | | This reverts commit bb1a1aeab0f2a5fe437c89b841a887ba56653453. We hit something on ci.rvm.jp, reverting until investigation is done. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66776 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* mjit.c: use boolean type for boolean variablesk0kubun2019-01-101-3/+3
| | | | | | | | and functions to clarify the intention and make sure it's not used in a surprising way (like using 2, 3, ... other than 0, 1 even while it seems to be a boolean). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66775 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* process.c: document system(..., exception: true) [ci skip]k0kubun2018-12-291-7/+26
| | | | | | | | From: Victor Shepelev <zverok.offline@gmail.com> [Bug #15480] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e