mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-10 14:00:21 +02:00
threadsafe port revealed counts
* libguile/ports.h: * libguile/ports.c (scm_revealed_count, scm_set_port_revealed_x): Make threadsafe. (scm_adjust_port_revealed_x): New function, to adjust a port's revealed count in a threadsafe way.
This commit is contained in:
parent
285ac79b1a
commit
b262d3065c
2 changed files with 31 additions and 2 deletions
|
@ -1106,7 +1106,13 @@ SCM_DEFINE (scm_set_port_conversion_strategy_x, "set-port-conversion-strategy!",
|
|||
int
|
||||
scm_revealed_count (SCM port)
|
||||
{
|
||||
return SCM_REVEALED (port);
|
||||
int ret;
|
||||
|
||||
scm_c_lock_port (port);
|
||||
ret = SCM_REVEALED (port);
|
||||
scm_c_unlock_port (port);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
SCM_DEFINE (scm_port_revealed, "port-revealed", 1, 0, 0,
|
||||
|
@ -1127,9 +1133,31 @@ SCM_DEFINE (scm_set_port_revealed_x, "set-port-revealed!", 2, 0, 0,
|
|||
"The return value is unspecified.")
|
||||
#define FUNC_NAME s_scm_set_port_revealed_x
|
||||
{
|
||||
int r;
|
||||
port = SCM_COERCE_OUTPORT (port);
|
||||
SCM_VALIDATE_OPENPORT (1, port);
|
||||
SCM_REVEALED (port) = scm_to_int (rcount);
|
||||
r = scm_to_int (rcount);
|
||||
scm_c_lock_port (port);
|
||||
SCM_REVEALED (port) = r;
|
||||
scm_c_unlock_port (port);
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
/* Set the revealed count for a port. */
|
||||
SCM_DEFINE (scm_adjust_port_revealed_x, "adjust-port-revealed!", 2, 0, 0,
|
||||
(SCM port, SCM addend),
|
||||
"Add @var{addend} to the revealed count of @var{port}.\n"
|
||||
"The return value is unspecified.")
|
||||
#define FUNC_NAME s_scm_set_port_revealed_x
|
||||
{
|
||||
int a;
|
||||
port = SCM_COERCE_OUTPORT (port);
|
||||
SCM_VALIDATE_OPENPORT (1, port);
|
||||
a = scm_to_int (addend);
|
||||
scm_c_lock_port (port);
|
||||
SCM_REVEALED (port) += a;
|
||||
scm_c_unlock_port (port);
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
|
|
@ -302,6 +302,7 @@ SCM_INLINE int scm_c_unlock_port (SCM port);
|
|||
SCM_API int scm_revealed_count (SCM port);
|
||||
SCM_API SCM scm_port_revealed (SCM port);
|
||||
SCM_API SCM scm_set_port_revealed_x (SCM port, SCM rcount);
|
||||
SCM_API SCM scm_adjust_port_revealed_x (SCM port, SCM addend);
|
||||
|
||||
/* Input. */
|
||||
SCM_INLINE int scm_get_byte_or_eof (SCM port);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue