diff --git a/binding/disposable-binding.h b/binding/disposable-binding.h index 5d304682..1f531991 100644 --- a/binding/disposable-binding.h +++ b/binding/disposable-binding.h @@ -36,13 +36,7 @@ RB_METHOD(disposableDispose) if (!d) return Qnil; - /* Nothing to do if already disposed */ - if (d->isDisposed()) - return Qnil; - - GFX_LOCK; d->dispose(); - GFX_UNLOCK; return Qnil; } diff --git a/src/util/disposable.h b/src/util/disposable.h index b61e1817..5795cf74 100644 --- a/src/util/disposable.h +++ b/src/util/disposable.h @@ -50,9 +50,16 @@ public: if (disposed) return; - releaseResources(); - disposed = true; - wasDisposed(); + GFX_LOCK; + try { + releaseResources(); + disposed = true; + wasDisposed(); + } catch (Exception &e) { + GFX_UNLOCK; + throw e; + } + GFX_UNLOCK; } bool isDisposed() const