tdf#108889 ref count goes negative with 0 undo levels configured

Change-Id: Ic28c3738f951af6e5371f88b4bb061a0aadf16e1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151332
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx
index 2ff56e7..1cf9be6 100644
--- a/include/svx/svdedtv.hxx
+++ b/include/svx/svdedtv.hxx
@@ -154,7 +154,7 @@ protected:
    // Removes all objects of the MarkList from their ObjLists including Undo.
    // The entries in rMark remain.
    // @return a list of objects that must be deleted after the outermost EndUndo
    std::vector<SdrObject *> DeleteMarkedList(SdrMarkList const& rMark); // DeleteMarked -> DeleteMarkedList
    std::vector<rtl::Reference<SdrObject>> DeleteMarkedList(SdrMarkList const& rMark); // DeleteMarked -> DeleteMarkedList

    // Check possibilities of all marked objects
    virtual void CheckPossibilities();
diff --git a/svx/source/svdraw/svdedtv.cxx b/svx/source/svdraw/svdedtv.cxx
index 96e6177..27015e4 100644
--- a/svx/source/svdraw/svdedtv.cxx
+++ b/svx/source/svdraw/svdedtv.cxx
@@ -712,9 +712,9 @@ void SdrEditView::ForceMarkedObjToAnotherPage()
    }
}

std::vector<SdrObject*> SdrEditView::DeleteMarkedList(SdrMarkList const& rMark)
std::vector<rtl::Reference<SdrObject>> SdrEditView::DeleteMarkedList(SdrMarkList const& rMark)
{
    std::vector<SdrObject*> ret;
    std::vector<rtl::Reference<SdrObject>> ret;
    if (rMark.GetMarkCount()!=0)
    {
        rMark.ForceSort();
@@ -761,13 +761,13 @@ std::vector<SdrObject*> SdrEditView::DeleteMarkedList(SdrMarkList const& rMark)
                    aUpdaters.push_back(new E3DModifySceneSnapRectUpdater(pObj));
                }

                pOL->RemoveObject(nOrdNum);

                if( !bUndo )
                {
                    // tdf#108863 don't delete objects before EndUndo()
                    // tdf#108863 and tdf#108889 don't delete objects before EndUndo()
                    ret.push_back(pObj);
                }

                pOL->RemoveObject(nOrdNum);
            }

            // fire scene updaters
@@ -865,10 +865,7 @@ void SdrEditView::DeleteMarkedObj()
        // original stuff: remove selected objects. Handle clear will
        // do something only once
        auto temp(DeleteMarkedList(GetMarkedObjectList()));
        for (auto p : temp)
        {
            lazyDeleteObjects.push_back(p);
        }
        lazyDeleteObjects.insert(lazyDeleteObjects.end(), temp.begin(), temp.end());
        GetMarkedObjectListWriteAccess().Clear();
        maHdlList.Clear();