[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: port-for-each vs lazy sweep
From: |
Ludovic Courtès |
Subject: |
Re: port-for-each vs lazy sweep |
Date: |
Sat, 27 Oct 2007 17:07:44 +0200 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) |
Hi,
I just fixed another bug (similar to the previous one) in the new port
table, in HEAD.
Thanks,
Ludovic.
--- orig/libguile/ChangeLog
+++ mod/libguile/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-27 Ludovic Courtès <address@hidden>
+
+ * fports.c (scm_i_evict_port): Expect a port, rather than a pair
+ containing the port. Fixes a bug in the new port table (2007-08-26).
+ (scm_evict_ports): Use `scm_c_port_for_each ()'.
+
2007-10-21 Neil Jerram <address@hidden>
* eval.c (unmemoize_delay): Extend the environment before
--- orig/libguile/fports.c
+++ mod/libguile/fports.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2003, 2004, 2006
Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2003, 2004, 2006,
2007 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -221,11 +221,10 @@ SCM_DEFINE (scm_setvbuf, "setvbuf", 2, 1
/* Move ports with the specified file descriptor to new descriptors,
* resetting the revealed count to 0.
*/
-static SCM
-scm_i_evict_port (SCM handle, void *closure)
+static void
+scm_i_evict_port (void *closure, SCM port)
{
int fd = * (int*) closure;
- SCM port = SCM_CAR (handle);
if (SCM_FPORTP (port))
{
@@ -239,18 +238,12 @@ scm_i_evict_port (SCM handle, void *clos
scm_set_port_revealed_x (port, scm_from_int (0));
}
}
-
- return handle;
}
void
scm_evict_ports (int fd)
{
- scm_i_scm_pthread_mutex_lock (&scm_i_port_table_mutex);
- scm_internal_hash_for_each_handle (&scm_i_evict_port,
- (void*) &fd,
- scm_i_port_weak_hash);
- scm_i_pthread_mutex_unlock (&scm_i_port_table_mutex);
+ scm_c_port_for_each (scm_i_evict_port, (void *) &fd);
}