Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
ad3aaf33
Commit
ad3aaf33
authored
Apr 29, 2009
by
Andreas Schwab
Browse files
(Fcall_process): Fix GC protection. Make sure
current buffer is always restored.
parent
9c358bda
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
14 deletions
+27
-14
src/ChangeLog
src/ChangeLog
+5
-0
src/callproc.c
src/callproc.c
+22
-14
No files found.
src/ChangeLog
View file @
ad3aaf33
2009-04-29 Andreas Schwab <schwab@linux-m68k.org>
* callproc.c (Fcall_process): Fix GC protection. Make sure
current buffer is always restored.
2009-04-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* atimer.c (init_atimer): Also clear stopped_atimers.
...
...
src/callproc.c
View file @
ad3aaf33
...
...
@@ -153,18 +153,26 @@ call_process_kill (fdpid)
}
Lisp_Object
call_process_cleanup
(
fdpid
)
Lisp_Object
fdpid
;
call_process_cleanup
(
arg
)
Lisp_Object
arg
;
{
Lisp_Object
fdpid
=
Fcdr
(
arg
);
#if defined (MSDOS)
Lisp_Object
file
;
#else
int
pid
;
#endif
Fset_buffer
(
Fcar
(
arg
));
#if defined (MSDOS)
/* for MSDOS fdpid is really (fd . tempfile) */
register
Lisp_Object
file
;
file
=
Fcdr
(
fdpid
);
emacs_close
(
XFASTINT
(
Fcar
(
fdpid
)));
if
(
strcmp
(
SDATA
(
file
),
NULL_DEVICE
)
!=
0
)
unlink
(
SDATA
(
file
));
#else
/* not MSDOS */
register
int
pid
=
XFASTINT
(
Fcdr
(
fdpid
));
pid
=
XFASTINT
(
Fcdr
(
fdpid
));
if
(
call_process_exited
)
{
...
...
@@ -231,7 +239,6 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
int
count
=
SPECPDL_INDEX
();
register
const
unsigned
char
**
new_argv
;
struct
buffer
*
old
=
current_buffer
;
/* File to use for stderr in the child.
t means use same as standard output. */
Lisp_Object
error_file
;
...
...
@@ -399,9 +406,9 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
}
/* Search for program; barf if not found. */
{
struct
gcpro
gcpro1
;
struct
gcpro
gcpro1
,
gcpro2
,
gcpro3
,
gcpro4
;
GCPRO
1
(
current_dir
);
GCPRO
4
(
infile
,
buffer
,
current_dir
,
error_file
);
openp
(
Vexec_path
,
args
[
0
],
Vexec_suffixes
,
&
path
,
make_number
(
X_OK
));
UNGCPRO
;
}
...
...
@@ -422,9 +429,9 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
if
(
nargs
>
4
)
{
register
int
i
;
struct
gcpro
gcpro1
,
gcpro2
,
gcpro3
;
struct
gcpro
gcpro1
,
gcpro2
,
gcpro3
,
gcpro4
,
gcpro5
;
GCPRO
3
(
infile
,
buffer
,
current_dir
);
GCPRO
5
(
infile
,
buffer
,
current_dir
,
path
,
error_file
);
argument_coding
.
dst_multibyte
=
0
;
for
(
i
=
4
;
i
<
nargs
;
i
++
)
{
...
...
@@ -630,10 +637,13 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
#if defined(MSDOS)
/* MSDOS needs different cleanup information. */
record_unwind_protect
(
call_process_cleanup
,
Fcons
(
make_number
(
fd
[
0
]),
build_string
(
tempfile
)));
Fcons
(
Fcurrent_buffer
(),
Fcons
(
make_number
(
fd
[
0
]),
build_string
(
tempfile
))));
#else
record_unwind_protect
(
call_process_cleanup
,
Fcons
(
make_number
(
fd
[
0
]),
make_number
(
pid
)));
Fcons
(
Fcurrent_buffer
(),
Fcons
(
make_number
(
fd
[
0
]),
make_number
(
pid
))));
#endif
/* not MSDOS */
...
...
@@ -812,7 +822,7 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
coding-system used to decode the process output. */
if
(
inherit_process_coding_system
)
call1
(
intern
(
"after-insert-file-set-buffer-file-coding-system"
),
make_number
(
total_read
));
make_number
(
total_read
));
}
/* Wait for it to terminate, unless it already has. */
...
...
@@ -820,8 +830,6 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
immediate_quit
=
0
;
set_buffer_internal
(
old
);
/* Don't kill any children that the subprocess may have left behind
when exiting. */
call_process_exited
=
1
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment