https://codereview.appspot.com/575990043/diff/577740043/lily/mutable-properties.cc
File lily/mutable-properties.cc (right):

https://codereview.appspot.com/575990043/diff/577740043/lily/mutable-properties.cc#newcode50
lily/mutable-properties.cc:50: if (SCM_EQ_P (key (i), k))
scm_is_eq

https://codereview.appspot.com/575990043/diff/577740043/lily/mutable-properties.cc#newcode71
lily/mutable-properties.cc:71: if (SCM_EQ_P (key (i), k))
scm_is_eq

https://codereview.appspot.com/575990043/diff/577740043/lily/mutable-properties.cc#newcode97
lily/mutable-properties.cc:97: if (SCM_EQ_P (key (i), k))
scm_is_eq

https://codereview.appspot.com/575990043/diff/577740043/lily/mutable-properties.cc#newcode109
lily/mutable-properties.cc:109: Mutable_properties::mark () const
This can segfault in GUILEv2 and/or depending on some other
circumstances since the C++ members are only getting initialized after
the GC hook is already operative.

You need to sort the C++ structures potentially accessed by the GC hook
into a Preinit class (grep for Preinit for existing uses) and inherit
from that before inheriting from whatever operates the Smob.  Then C++
guarantees an initialisation order consistent with GC hook operation.

https://codereview.appspot.com/575990043/

Reply via email to