protected void terminate ()
    {
        //  If termination is already underway, there's no point
        //  in starting it anew.
        if (terminating)
            return;

        //  As for the root of the ownership tree, there's noone to terminate it,
        //  so it has to terminate itself.
        if (owner == null) {
            process_term (options.linger);
            return;
        }

        //  If I am an owned object, I'll ask my owner to terminate me.
        send_term_req (owner, this);
    }