Author: Remi Meier <[email protected]>
Branch: finalizer-queues
Changeset: r1997:2101463c93d1
Date: 2016-11-16 08:59 +0100
http://bitbucket.org/pypy/stmgc/changeset/2101463c93d1/
Log: rename light_finalizer to destructor
diff --git a/c8/stm/core.c b/c8/stm/core.c
--- a/c8/stm/core.c
+++ b/c8/stm/core.c
@@ -1047,7 +1047,7 @@
assert(tree_is_cleared(STM_PSEGMENT->nursery_objects_shadows));
assert(tree_is_cleared(STM_PSEGMENT->callbacks_on_commit_and_abort[0]));
assert(tree_is_cleared(STM_PSEGMENT->callbacks_on_commit_and_abort[1]));
- assert(list_is_empty(STM_PSEGMENT->young_objects_with_light_finalizers));
+ assert(list_is_empty(STM_PSEGMENT->young_objects_with_destructors));
assert(STM_PSEGMENT->finalizers == NULL);
assert(STM_PSEGMENT->active_queues == NULL);
#ifndef NDEBUG
diff --git a/c8/stm/core.h b/c8/stm/core.h
--- a/c8/stm/core.h
+++ b/c8/stm/core.h
@@ -13,6 +13,7 @@
#include <errno.h>
#include <pthread.h>
#include <signal.h>
+#include <stdbool.h>
/************************************************************/
@@ -145,8 +146,8 @@
#endif
/* light finalizers */
- struct list_s *young_objects_with_light_finalizers;
- struct list_s *old_objects_with_light_finalizers;
+ struct list_s *young_objects_with_destructors;
+ struct list_s *old_objects_with_destructors;
/* regular finalizers (objs from the current transaction only) */
struct finalizers_s *finalizers;
diff --git a/c8/stm/finalizer.c b/c8/stm/finalizer.c
--- a/c8/stm/finalizer.c
+++ b/c8/stm/finalizer.c
@@ -4,7 +4,7 @@
#endif
/* callbacks */
-void (*stmcb_light_finalizer)(object_t *);
+void (*stmcb_destructor)(object_t *);
void (*stmcb_finalizer)(object_t *);
@@ -91,7 +91,7 @@
char *old_gs_register = STM_SEGMENT->segment_base;
bool must_fix_gs = old_gs_register != pseg->pub.segment_base;
- struct list_s *lst = pseg->young_objects_with_light_finalizers;
+ struct list_s *lst = pseg->young_objects_with_destructors;
long i, count = list_count(lst);
if (lst > 0) {
for (i = 0; i < count; i++) {
@@ -101,15 +101,15 @@
set_gs_register(pseg->pub.segment_base);
must_fix_gs = false;
}
- stmcb_light_finalizer(obj);
+ stmcb_destructor(obj);
}
list_clear(lst);
}
/* also deals with overflow objects: they are at the tail of
- old_objects_with_light_finalizers (this list is kept in order
+ old_objects_with_destructors (this list is kept in order
and we cannot add any already-committed object) */
- lst = pseg->old_objects_with_light_finalizers;
+ lst = pseg->old_objects_with_destructors;
count = list_count(lst);
while (count > 0) {
object_t *obj = (object_t *)list_item(lst, --count);
@@ -120,7 +120,7 @@
set_gs_register(pseg->pub.segment_base);
must_fix_gs = false;
}
- stmcb_light_finalizer(obj);
+ stmcb_destructor(obj);
}
if (STM_SEGMENT->segment_base != old_gs_register)
@@ -128,14 +128,14 @@
}
-void stm_enable_light_finalizer(object_t *obj)
+void stm_enable_destructor(object_t *obj)
{
if (_is_young(obj)) {
- LIST_APPEND(STM_PSEGMENT->young_objects_with_light_finalizers, obj);
+ LIST_APPEND(STM_PSEGMENT->young_objects_with_destructors, obj);
}
else {
assert(_is_from_same_transaction(obj));
- LIST_APPEND(STM_PSEGMENT->old_objects_with_light_finalizers, obj);
+ LIST_APPEND(STM_PSEGMENT->old_objects_with_destructors, obj);
}
}
@@ -165,7 +165,7 @@
{
/* for light finalizers: executes finalizers for objs that don't survive
this minor gc */
- struct list_s *lst = STM_PSEGMENT->young_objects_with_light_finalizers;
+ struct list_s *lst = STM_PSEGMENT->young_objects_with_destructors;
long i, count = list_count(lst);
for (i = 0; i < count; i++) {
object_t *obj = (object_t *)list_item(lst, i);
@@ -174,12 +174,12 @@
object_t *TLPREFIX *pforwarded_array = (object_t *TLPREFIX *)obj;
if (pforwarded_array[0] != GCWORD_MOVED) {
/* not moved: the object dies */
- stmcb_light_finalizer(obj);
+ stmcb_destructor(obj);
}
else {
obj = pforwarded_array[1]; /* moved location */
assert(!_is_young(obj));
- LIST_APPEND(STM_PSEGMENT->old_objects_with_light_finalizers, obj);
+ LIST_APPEND(STM_PSEGMENT->old_objects_with_destructors, obj);
}
}
list_clear(lst);
@@ -191,11 +191,11 @@
int old_gs_register = STM_SEGMENT->segment_num;
int current_gs_register = old_gs_register;
long j;
-
assert(list_is_empty(get_priv_segment(0)->old_objects_with_light_finalizers));
+ assert(list_is_empty(get_priv_segment(0)->old_objects_with_destructors));
for (j = 1; j < NB_SEGMENTS; j++) {
struct stm_priv_segment_info_s *pseg = get_priv_segment(j);
- struct list_s *lst = pseg->old_objects_with_light_finalizers;
+ struct list_s *lst = pseg->old_objects_with_destructors;
long i, count = list_count(lst);
lst->count = 0;
for (i = 0; i < count; i++) {
@@ -217,7 +217,7 @@
set_gs_register(get_segment_base(j));
current_gs_register = j;
}
- stmcb_light_finalizer(obj);
+ stmcb_destructor(obj);
}
else {
/* object survives */
diff --git a/c8/stm/finalizer.h b/c8/stm/finalizer.h
--- a/c8/stm/finalizer.h
+++ b/c8/stm/finalizer.h
@@ -1,3 +1,4 @@
+#include <stdint.h>
/* see deal_with_objects_with_finalizers() for explanation of these fields */
struct finalizers_s {
diff --git a/c8/stm/setup.c b/c8/stm/setup.c
--- a/c8/stm/setup.c
+++ b/c8/stm/setup.c
@@ -100,8 +100,8 @@
pr->nursery_objects_shadows = tree_create();
pr->callbacks_on_commit_and_abort[0] = tree_create();
pr->callbacks_on_commit_and_abort[1] = tree_create();
- pr->young_objects_with_light_finalizers = list_create();
- pr->old_objects_with_light_finalizers = list_create();
+ pr->young_objects_with_destructors = list_create();
+ pr->old_objects_with_destructors = list_create();
pr->last_commit_log_entry = &commit_log_root;
pr->overflow_number = GCFLAG_OVERFLOW_NUMBER_bit0 * i;
@@ -156,8 +156,8 @@
tree_free(pr->nursery_objects_shadows);
tree_free(pr->callbacks_on_commit_and_abort[0]);
tree_free(pr->callbacks_on_commit_and_abort[1]);
- list_free(pr->young_objects_with_light_finalizers);
- list_free(pr->old_objects_with_light_finalizers);
+ list_free(pr->young_objects_with_destructors);
+ list_free(pr->old_objects_with_destructors);
if (pr->active_queues) tree_free(pr->active_queues);
}
diff --git a/c8/stmgc.h b/c8/stmgc.h
--- a/c8/stmgc.h
+++ b/c8/stmgc.h
@@ -710,11 +710,11 @@
void stm_force_transaction_break(stm_thread_local_t *tl);
-/* Support for light finalizers. This is a simple version of
+/* Support for destructors. This is a simple version of
finalizers that guarantees not to do anything fancy, like not
resurrecting objects. */
-extern void (*stmcb_light_finalizer)(object_t *);
-void stm_enable_light_finalizer(object_t *);
+extern void (*stmcb_destructor)(object_t *);
+void stm_enable_destructor(object_t *);
/* Support for regular finalizers. Unreachable objects with
finalizers are kept alive, as well as everything they point to, and
@@ -742,7 +742,7 @@
'object_t *'. Note that the type 'stm_hashtable_t' is not an
object type at all; you need to allocate and free it explicitly.
If you want to embed the hashtable inside an 'object_t' you
- probably need a light finalizer to do the freeing. */
+ probably need a destructor to do the freeing. */
typedef struct stm_hashtable_s stm_hashtable_t;
typedef TLPREFIX struct stm_hashtable_entry_s stm_hashtable_entry_t;
@@ -797,8 +797,8 @@
/* Queues. The items you put() and get() back are in random order.
Like hashtables, the type 'stm_queue_t' is not an object type at
all; you need to allocate and free it explicitly. If you want to
- embed the queue inside an 'object_t' you probably need a light
- finalizer to do the freeing. */
+ embed the queue inside an 'object_t' you probably need a destructor
+ to do the freeing. */
typedef struct stm_queue_s stm_queue_t;
stm_queue_t *stm_queue_create(void);
diff --git a/c8/test/support.py b/c8/test/support.py
--- a/c8/test/support.py
+++ b/c8/test/support.py
@@ -206,9 +206,8 @@
bool (*_stm_smallmalloc_keep)(char *data);
void _stm_smallmalloc_sweep_test(void);
-
-void (*stmcb_light_finalizer)(object_t *);
-void stm_enable_light_finalizer(object_t *);
+void (*stmcb_destructor)(object_t *);
+void stm_enable_destructor(object_t *);
void (*stmcb_finalizer)(object_t *);
diff --git a/c8/test/test_finalizer.py b/c8/test/test_finalizer.py
--- a/c8/test/test_finalizer.py
+++ b/c8/test/test_finalizer.py
@@ -2,13 +2,13 @@
import py
-class TestLightFinalizer(BaseTest):
+class TestDestructors(BaseTest):
def setup_method(self, meth):
BaseTest.setup_method(self, meth)
#
@ffi.callback("void(object_t *)")
- def light_finalizer(obj):
+ def destructor(obj):
assert stm_get_obj_size(obj) == 48
segnum = lib.current_segment_num()
tlnum = '?'
@@ -17,21 +17,21 @@
if tl.last_associated_segment_num == segnum:
tlnum = n
break
- self.light_finalizers_called.append((obj, tlnum))
- self.light_finalizers_called = []
- lib.stmcb_light_finalizer = light_finalizer
- self._light_finalizer_keepalive = light_finalizer
+ self.destructors_called.append((obj, tlnum))
+ self.destructors_called = []
+ lib.stmcb_destructor = destructor
+ self._destructor_keepalive = destructor
def teardown_method(self, meth):
- lib.stmcb_light_finalizer = ffi.NULL
+ lib.stmcb_destructor = ffi.NULL
BaseTest.teardown_method(self, meth)
def expect_finalized(self, objs, from_tlnum=None):
- assert [obj for (obj, tlnum) in self.light_finalizers_called] == objs
+ assert [obj for (obj, tlnum) in self.destructors_called] == objs
if from_tlnum is not None:
- for obj, tlnum in self.light_finalizers_called:
+ for obj, tlnum in self.destructors_called:
assert tlnum == from_tlnum
- self.light_finalizers_called = []
+ self.destructors_called = []
def test_no_finalizer(self):
self.start_transaction()
@@ -39,45 +39,45 @@
self.commit_transaction()
self.expect_finalized([])
- def test_young_light_finalizer(self):
+ def test_young_destructor(self):
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.expect_finalized([])
self.commit_transaction()
self.expect_finalized([lp1], from_tlnum=0)
- def test_young_light_finalizer_survives(self):
+ def test_young_destructor_survives(self):
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.push_root(lp1) # stays alive
self.commit_transaction()
self.expect_finalized([])
- def test_young_light_finalizer_aborts(self):
+ def test_young_destructor_aborts(self):
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.expect_finalized([])
self.abort_transaction()
self.start_transaction()
self.expect_finalized([lp1], from_tlnum=0)
- def test_old_light_finalizer(self):
+ def test_old_destructor(self):
self.start_transaction()
lp1 = stm_allocate(48)
self.push_root(lp1)
stm_minor_collect()
lp1 = self.pop_root()
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.commit_transaction()
self.expect_finalized([])
- def test_old_light_finalizer_2(self):
+ def test_old_destructor_2(self):
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.push_root(lp1)
stm_minor_collect()
lp1 = self.pop_root()
@@ -86,10 +86,10 @@
self.expect_finalized([lp1])
self.commit_transaction()
- def test_old_light_finalizer_survives(self):
+ def test_old_destructor_survives(self):
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.push_root(lp1)
stm_minor_collect()
lp1 = self.pop_root()
@@ -98,13 +98,13 @@
self.commit_transaction()
self.expect_finalized([])
- def test_old_light_finalizer_segment(self):
+ def test_old_destructor_segment(self):
self.start_transaction()
#
self.switch(1)
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.push_root(lp1)
stm_minor_collect()
lp1 = self.pop_root()
@@ -114,10 +114,10 @@
stm_major_collect()
self.expect_finalized([lp1], from_tlnum=1)
- def test_old_light_finalizer_aborts(self):
+ def test_old_destructor_aborts(self):
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.push_root(lp1)
self.commit_transaction()
#
@@ -126,10 +126,10 @@
self.abort_transaction()
self.expect_finalized([])
- def test_overflow_light_finalizer_aborts(self):
+ def test_overflow_destructor_aborts(self):
self.start_transaction()
lp1 = stm_allocate(48)
- lib.stm_enable_light_finalizer(lp1)
+ lib.stm_enable_destructor(lp1)
self.push_root(lp1)
stm_minor_collect()
lp1 = self.pop_root()
diff --git a/c8/test/test_hashtable.py b/c8/test/test_hashtable.py
--- a/c8/test/test_hashtable.py
+++ b/c8/test/test_hashtable.py
@@ -43,8 +43,8 @@
BaseTest.setup_method(self, meth)
#
@ffi.callback("void(object_t *)")
- def light_finalizer(obj):
- print 'light_finalizer:', obj
+ def destructor(obj):
+ print 'destructor:', obj
try:
assert lib._get_type_id(obj) == 421419
self.seen_hashtables -= 1
@@ -54,20 +54,20 @@
self.errors.append(sys.exc_info()[2])
raise
- lib.stmcb_light_finalizer = light_finalizer
- self._light_finalizer_keepalive = light_finalizer
+ lib.stmcb_destructor = destructor
+ self._destructor_keepalive = destructor
self.seen_hashtables = 0
self.errors = []
def teardown_method(self, meth):
BaseTest.teardown_method(self, meth)
- lib.stmcb_light_finalizer = ffi.NULL
+ lib.stmcb_destructor = ffi.NULL
assert self.errors == []
assert self.seen_hashtables == 0
def allocate_hashtable(self):
h = stm_allocate_hashtable()
- lib.stm_enable_light_finalizer(h)
+ lib.stm_enable_destructor(h)
self.seen_hashtables += 1
return h
diff --git a/c8/test/test_queue.py b/c8/test/test_queue.py
--- a/c8/test/test_queue.py
+++ b/c8/test/test_queue.py
@@ -13,8 +13,8 @@
BaseTest.setup_method(self, meth)
#
@ffi.callback("void(object_t *)")
- def light_finalizer(obj):
- print 'light_finalizer:', obj
+ def destructor(obj):
+ print 'destructor:', obj
try:
assert lib._get_type_id(obj) == 421417
self.seen_queues -= 1
@@ -24,20 +24,20 @@
self.errors.append(sys.exc_info()[2])
raise
- lib.stmcb_light_finalizer = light_finalizer
- self._light_finalizer_keepalive = light_finalizer
+ lib.stmcb_destructor = destructor
+ self._destructor_keepalive = destructor
self.seen_queues = 0
self.errors = []
def teardown_method(self, meth):
BaseTest.teardown_method(self, meth)
- lib.stmcb_light_finalizer = ffi.NULL
+ lib.stmcb_destructor = ffi.NULL
assert self.errors == []
assert self.seen_queues == 0
def allocate_queue(self):
q = stm_allocate_queue()
- lib.stm_enable_light_finalizer(q)
+ lib.stm_enable_destructor(q)
self.seen_queues += 1
return q
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit