1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 09:10:22 +02:00

* dynl.c (scm_dynamic_call, scm_dynamic_args_call): Wrap dynamic

function call in SCM_DEFER_INTS/SCM_ALLOW_INTS.
(scm_dynamic_link, scm_dynamic_unlink, scm_dynamic_func): Always
call the sysdep functions with deferred ints.
* dynl.c, dynl-dl.c, dynl-dld.c, dynl-shl.c (sysdep_dynl_link,
sysdep_dynl_unlink, sysdep_dynl_func): Expect to be called with
deferred interrupts and insert SCM_ALLOW_INTS before throwing an
error.

* dynl.c (scm_dynamic_unlink, scm_dynamic_call): Return
SCM_UNSPECIFIED.
This commit is contained in:
Marius Vollmer 1997-06-16 19:09:11 +00:00
parent cc0b331281
commit 419e9e117f
4 changed files with 49 additions and 28 deletions

View file

@ -72,7 +72,10 @@ sysdep_dynl_link (fname, subr)
status = dld_link (fname);
if (status)
{
SCM_ALLOW_INTS;
scm_misc_error (subr, dld_strerror (status), SCM_EOL);
}
return fname;
}
@ -83,11 +86,12 @@ sysdep_dynl_unlink (handle, subr)
{
int status;
SCM_DEFER_INTS;
status = dld_unlink_by_file ((char *)fname, 1);
SCM_ALLOW_INTS;
if (status)
{
SCM_ALLOW_INTS;
scm_misc_error (s_dynamic_unlink, dld_strerror (status), SCM_EOL);
}
}
static void *
@ -98,15 +102,14 @@ sysdep_dynl_func (symb, handle, subr)
{
void *func;
SCM_DEFER_INTS;
func = (void *) dld_get_func (func);
if (func == 0)
scm_misc_error (subr, dld_strerror (dld_errno), SCM_EOL);
if (!dld_function_executable_p (func)) {
listundefs ();
SCM_ALLOW_INTS;
scm_misc_error (subr, "unresolved symbols remain", SCM_EOL);
}
SCM_ALLOW_INTS;
return func;
}