https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101692

--- Comment #7 from Eugene Zhiganov <zed at lab127 dot karelia.ru> ---
(In reply to Eugene Zhiganov from comment #5)
> This rxMachines array is just for the purpose of holding references,
> since references in linked list are not counted at all by GC.

Maybe I am not right here...

Things a little bit more complicated.
Initially objects were created like this:

    auto rxPool = new RestRoom();
    for (int k = 0; k < maxClients; k++) {
        auto sm = new RxSm(rxPool);
        sm.run();
    }

After the the loop 'sm' is out of scope
and all these just created instances
are marked for deletion I guess.

RxSm has 3 states, INIT, IDLE and WORK.
run() method calls enter function for INIT state.
In this function rx do some initalization
and send a message to self (message means
'now go to IDLE state').

A little bit later, when program enters event loop
and starts processing messages, that message
is processed, machine enters IDLE state,
where it puts itself into a pool like this:

    void rxIdleEnter() {
        rR.put(this);
        // adds 'this' pointer to Slist
    }

But at this moment the instance is already marked
for deletion... and hence reference in the list
is not counted either because of

* object was marked for deletion

or because of

* references in Slist are not counted at all (???)

Reply via email to