зеркало из https://github.com/github/ruby.git
* process.c (rb_exec_async_signal_safe): extracted from rb_exec_err.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
4da82e58a1
Коммит
d410a38b8e
|
@ -1,3 +1,7 @@
|
|||
Sat Jun 9 10:57:14 2012 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* process.c (rb_exec_async_signal_safe): extracted from rb_exec_err.
|
||||
|
||||
Sat Jun 9 09:31:07 2012 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* process.c: simplified because close_others option is always
|
||||
|
|
22
process.c
22
process.c
|
@ -2583,9 +2583,9 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
|
|||
return rb_run_exec_options_err(e, s, NULL, 0);
|
||||
}
|
||||
|
||||
/* This function should be async-signal-safe. Actually it isn't because after_exec(). */
|
||||
int
|
||||
rb_exec_err(const struct rb_exec_arg *e, char *errmsg, size_t errmsg_buflen)
|
||||
/* This function should be async-signal-safe. Actually it is. */
|
||||
static int
|
||||
rb_exec_async_signal_safe(const struct rb_exec_arg *e, char *errmsg, size_t errmsg_buflen)
|
||||
{
|
||||
#if !defined(HAVE_FORK)
|
||||
struct rb_exec_arg sarg, *sargp = &sarg;
|
||||
|
@ -2593,10 +2593,8 @@ rb_exec_err(const struct rb_exec_arg *e, char *errmsg, size_t errmsg_buflen)
|
|||
# define sargp NULL
|
||||
#endif
|
||||
|
||||
before_exec(); /* async-signal-safe if forked_child is true */
|
||||
|
||||
if (rb_run_exec_options_err(e, sargp, errmsg, errmsg_buflen) < 0) { /* async-signal-safe */
|
||||
goto failure;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (e->use_shell) {
|
||||
|
@ -2613,11 +2611,19 @@ rb_exec_err(const struct rb_exec_arg *e, char *errmsg, size_t errmsg_buflen)
|
|||
#else
|
||||
# undef sargp
|
||||
#endif
|
||||
failure:
|
||||
preserving_errno(after_exec()); /* xxx: not async-signal-safe because after_exec calls rb_thread_start_timer_thread. */
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
rb_exec_err(const struct rb_exec_arg *e, char *errmsg, size_t errmsg_buflen)
|
||||
{
|
||||
int ret;
|
||||
before_exec(); /* async-signal-safe if forked_child is true */
|
||||
ret = rb_exec_async_signal_safe(e, errmsg, errmsg_buflen);
|
||||
preserving_errno(after_exec()); /* not async-signal-safe because after_exec calls rb_thread_start_timer_thread. */
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
rb_exec(const struct rb_exec_arg *e)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче