tdf#128077 crash with calc dialogs and multiple windows

regression from
    commit bf359d01ac8b1e0292e8a92c38e58c03e6c17d8b
    add a Dialog::runAsync for the non-controller case
we end up destroying the dialog controller while the controller is in
it's own method, so keep it alive for the duration.

Change-Id: I0f26b4d40351ad62378f58c560f1a6d69d57a88e
Reviewed-on: https://gerrit.libreoffice.org/81425
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 0438034..300cdf0 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -27,6 +27,7 @@
#include <com/sun/star/accessibility/XAccessibleRelationSet.hpp>
#include <com/sun/star/accessibility/XAccessible.hpp>

#include <memory>
#include <vector>

namespace com
@@ -1964,7 +1965,7 @@ public:
    virtual ~Builder() {}
};

class VCL_DLLPUBLIC DialogController
class VCL_DLLPUBLIC DialogController : public std::enable_shared_from_this<DialogController>
{
public:
    virtual Dialog* getDialog() = 0;
diff --git a/sfx2/source/dialog/basedlgs.cxx b/sfx2/source/dialog/basedlgs.cxx
index c1906d5..30f0d0f 100644
--- a/sfx2/source/dialog/basedlgs.cxx
+++ b/sfx2/source/dialog/basedlgs.cxx
@@ -183,6 +183,12 @@ bool SfxModelessDialogController::IsClosing() const

void SfxModelessDialogController::EndDialog()
{
    if (m_xImpl->bClosing)
        return;
    // In the case of async dialogs, the call to SfxDialogController::EndDialog
    // may delete this object, so keep myself alive for the duration of this
    // stack frame.
    auto aHoldSelf = shared_from_this();
    m_xImpl->bClosing = true;
    SfxDialogController::EndDialog();
    if (!m_xImpl)