Uploaded image for project: 'Lucy'
  1. Lucy
  2. LUCY-90

Stateless VTables

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • None
    • Core
    • None

    Description

      Making VTables immortal is step one towards basic thread-safety for Lucy as a
      library. This patch removes reference counting from VTables, and also
      ensures that once added to the VTable_registry they are never removed.

      We would like to make VTables completely stateless, and this patch achieves
      that for everything except the VTable's cached host object. In Perl's case,
      it is impossible to stop the host from manipulating the cached host object's
      SvREFCNT; other hosts may have similar constraints.

      It is assumed that the host knows how to serialize access to its own objects
      (which we achieve in Perl by calling "SvSHARE(vtable->ref.host_obj)"). For
      the rest of Lucy, we simply deny access to the host object by making
      VTable_Inc_RefCount() and VTable_Dec_RefCount() no-ops, and by having
      VTable_Get_RefCount() always return 1 regardless of the state of the host
      object.

      With that refcounting trick in place, from the perspective of Lucy's innards,
      VTables are stateless.

      The VTable registration process is still racy – it is not safe to create and
      register new VTable singletons from multiple threads – but that is left for
      another patch.

      Mailing list discussion: http://markmail.org/message/eyjvfc72r653t76i

      Attachments

        1. stateless_vtables.diff
          10 kB
          Marvin Humphrey

        Activity

          People

            marvin Marvin Humphrey
            marvin Marvin Humphrey
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: