GC_PROTECT'ed the necessary variables (specifically, where >1 arg to
a function 'may GC')
This commit is contained in:
parent
bf57bfb356
commit
65407be26c
|
@ -61,17 +61,18 @@ s48_value wait_pid(s48_value s48_pid, s48_value s48_flags)
|
||||||
pid_t pid = (pid_t) s48_extract_integer (s48_pid);
|
pid_t pid = (pid_t) s48_extract_integer (s48_pid);
|
||||||
int flags = s48_extract_integer (s48_flags);
|
int flags = s48_extract_integer (s48_flags);
|
||||||
pid_t result_pid;
|
pid_t result_pid;
|
||||||
|
s48_value sch_retval = S48_UNSPECIFIC;
|
||||||
|
|
||||||
s48_value sch_result_pid = S48_UNSPECIFIC;
|
s48_value sch_result_pid = S48_UNSPECIFIC;
|
||||||
s48_value sch_status = S48_UNSPECIFIC;
|
s48_value sch_status = S48_UNSPECIFIC;
|
||||||
s48_value sch_status_list = S48_UNSPECIFIC;
|
s48_value sch_status_list = S48_UNSPECIFIC;
|
||||||
s48_value sch_retval = S48_UNSPECIFIC;
|
S48_DECLARE_GC_PROTECT(3);
|
||||||
S48_DECLARE_GC_PROTECT(4);
|
|
||||||
|
|
||||||
S48_GC_PROTECT_4(sch_result_pid, sch_status, sch_status_list, sch_retval);
|
S48_GC_PROTECT_3(sch_result_pid, sch_status, sch_status_list);
|
||||||
|
|
||||||
result_pid = waitpid(pid, &status, flags);
|
result_pid = waitpid(pid, &status, flags);
|
||||||
if (result_pid == -1)
|
if (result_pid == -1)
|
||||||
if (errno == ECHILD) sch_result_pid = s48_enter_fixnum (0);
|
if (errno == ECHILD) sch_result_pid = s48_enter_fixnum(0);
|
||||||
else s48_raise_os_error_2 (errno, s48_pid, s48_flags);
|
else s48_raise_os_error_2 (errno, s48_pid, s48_flags);
|
||||||
else {
|
else {
|
||||||
sch_result_pid = s48_enter_integer (result_pid);
|
sch_result_pid = s48_enter_integer (result_pid);
|
||||||
|
@ -126,8 +127,8 @@ s48_value scheme_exec(s48_value prog, s48_value argv, s48_value env)
|
||||||
}
|
}
|
||||||
s48_stop_alarm_interrupts();
|
s48_stop_alarm_interrupts();
|
||||||
execve(s48_extract_string (prog), unix_argv, unix_env); /* Do it. */
|
execve(s48_extract_string (prog), unix_argv, unix_env); /* Do it. */
|
||||||
e = errno;
|
|
||||||
s48_start_alarm_interrupts();
|
s48_start_alarm_interrupts();
|
||||||
|
e = errno;
|
||||||
if( env != S48_TRUE ) {
|
if( env != S48_TRUE ) {
|
||||||
Free(unix_env);
|
Free(unix_env);
|
||||||
}
|
}
|
||||||
|
@ -164,12 +165,16 @@ s48_value scsh_fork()
|
||||||
s48_value scheme_pipe()
|
s48_value scheme_pipe()
|
||||||
{
|
{
|
||||||
int fds[2];
|
int fds[2];
|
||||||
|
s48_value sch_retval = S48_UNSPECIFIC;
|
||||||
|
|
||||||
if(pipe(fds) == -1)
|
if(pipe(fds) == -1)
|
||||||
s48_raise_os_error(errno);
|
s48_raise_os_error(errno);
|
||||||
else
|
else {
|
||||||
return s48_cons (s48_enter_fixnum (fds[0]),
|
sch_retval = s48_cons(s48_enter_fixnum(fds[0]),
|
||||||
s48_cons (s48_enter_fixnum (fds [1]),
|
s48_cons(s48_enter_fixnum (fds[1]), S48_NULL));
|
||||||
S48_NULL));
|
}
|
||||||
|
|
||||||
|
return sch_retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
s48_value scsh_kill (s48_value sch_pid, s48_value sch_signal)
|
s48_value scsh_kill (s48_value sch_pid, s48_value sch_signal)
|
||||||
|
@ -317,14 +322,37 @@ s48_value scheme_cwd()
|
||||||
s48_value process_times()
|
s48_value process_times()
|
||||||
{
|
{
|
||||||
struct tms tms;
|
struct tms tms;
|
||||||
|
|
||||||
|
s48_value sch_result_utime = S48_UNSPECIFIC;
|
||||||
|
s48_value sch_result_stime = S48_UNSPECIFIC;
|
||||||
|
s48_value sch_result_cutime = S48_UNSPECIFIC;
|
||||||
|
s48_value sch_result_cstime = S48_UNSPECIFIC;
|
||||||
|
s48_value sch_result_retval = S48_UNSPECIFIC;
|
||||||
|
|
||||||
|
S48_DECLARE_GC_PROTECT(4);
|
||||||
|
|
||||||
clock_t t = times(&tms);
|
clock_t t = times(&tms);
|
||||||
if (t == -1) s48_raise_os_error(errno);
|
if (t == -1) s48_raise_os_error(errno);
|
||||||
return
|
|
||||||
s48_cons(s48_enter_integer (tms.tms_utime),
|
S48_GC_PROTECT_4(sch_result_utime,
|
||||||
s48_cons(s48_enter_integer (tms.tms_stime),
|
sch_result_stime,
|
||||||
s48_cons(s48_enter_integer (tms.tms_cutime),
|
sch_result_cutime,
|
||||||
s48_cons(s48_enter_integer (tms.tms_cstime),
|
sch_result_cstime);
|
||||||
S48_NULL))));
|
|
||||||
|
sch_result_utime = s48_enter_integer(tms.tms_utime);
|
||||||
|
sch_result_stime = s48_enter_integer(tms.tms_stime);
|
||||||
|
sch_result_cutime = s48_enter_integer(tms.tms_cutime);
|
||||||
|
sch_result_cstime = s48_enter_integer(tms.tms_cstime);
|
||||||
|
|
||||||
|
|
||||||
|
sch_result_retval = s48_cons(sch_result_utime,
|
||||||
|
s48_cons(sch_result_stime,
|
||||||
|
s48_cons(sch_result_cutime,
|
||||||
|
s48_cons(sch_result_cstime, S48_NULL))));
|
||||||
|
|
||||||
|
S48_GC_UNPROTECT();
|
||||||
|
|
||||||
|
return sch_result_retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
s48_value cpu_clock_ticks_per_sec()
|
s48_value cpu_clock_ticks_per_sec()
|
||||||
|
@ -671,12 +699,17 @@ s48_value get_groups()
|
||||||
get_groups();
|
get_groups();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
S48_DECLARE_GC_PROTECT(1);
|
||||||
|
S48_GC_PROTECT_1(l);
|
||||||
|
|
||||||
while (i > 0){
|
while (i > 0){
|
||||||
l = s48_cons(s48_enter_integer(gp[--i]), l);
|
l = s48_cons(s48_enter_integer(gp[--i]), l);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (veclen > 20) Free(gp);
|
if (veclen > 20) Free(gp);
|
||||||
|
|
||||||
|
S48_GC_UNPROTECT();
|
||||||
|
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue