diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+### 0.21.5
+
++ Add [releaseObject](https://hackage.haskell.org/package/haskell-gi-base-0.21.5/docs/Data-GI-Base-ManagedPtr.html#v:releaseObject), a function useful for manually releasing memory associated to GObjects.
+
 ### 0.21.4
 
 + Add support for callback-valued properties.
diff --git a/Data/GI/Base/Attributes.hs b/Data/GI/Base/Attributes.hs
--- a/Data/GI/Base/Attributes.hs
+++ b/Data/GI/Base/Attributes.hs
@@ -13,6 +13,14 @@
 -- attribute, but we can also have attributes for types not descending
 -- from `Data.GI.Base.BasicTypes.GObject`).
 --
+-- If you're wondering what the possible attributes of a GObject are,
+-- look at the list of properties in the documentation, e.g. the
+-- Properties heading of the docs for 'GI.Gtk.Objects.Button' lists
+-- properties such as @image@ and @relief@. Parent classes may also
+-- introduce properties, so since a Button is an instance of
+-- @IsActionable@, it inherits properties like @actionName@ from
+-- 'GI.Gtk.Interfaces.Actionable' too.
+--
 -- As an example consider a @button@ widget and a property (of the
 -- Button class, or any of its parent classes or implemented
 -- interfaces) called "label". The simplest way of getting the value
diff --git a/Data/GI/Base/ManagedPtr.hs b/Data/GI/Base/ManagedPtr.hs
--- a/Data/GI/Base/ManagedPtr.hs
+++ b/Data/GI/Base/ManagedPtr.hs
@@ -31,6 +31,7 @@
     -- * Wrappers
     , newObject
     , wrapObject
+    , releaseObject
     , unrefObject
     , disownObject
     , newBoxed
@@ -274,6 +275,17 @@
   when (ptr == nullPtr) (nullPtrWarning "wrapObject" callStack)
   fPtr <- newManagedPtr' ptr_to_g_object_unref $ castPtr ptr
   return $! constructor fPtr
+
+-- | Unref the given `GObject` and disown it. Use this if you want to
+-- manually release the memory associated to a given `GObject`
+-- (assuming that no other reference to the underlying C object exists)
+-- before the garbage collector does it. It is typically not safe to
+-- access the `GObject` after calling this function.
+releaseObject :: (HasCallStack, GObject a) => a -> IO ()
+releaseObject obj = do
+  ptr <- disownObject obj
+  dbgDealloc obj
+  dbg_g_object_unref ptr
 
 -- It is fine to use unsafe here, since all this does is schedule an
 -- idle callback. The scheduling itself will never block for a long
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,3 +1,17 @@
+The haskell-gi-base library and included works are provided under the terms of
+the GNU Library General Public License (LGPL) version 2.1 with the following
+exception:
+
+Static linking of applications or any other source to the haskell-gi-base
+library does not constitute a modified or derivative work and does not require
+the author(s) to provide source code for said work, to link against the shared
+haskell-gi-base libraries, or to link their applications against a
+user-supplied version of haskell-gi-base. If you link applications to a
+modified version of haskell-gi-base, then the changes to haskell-gi-base must
+be provided under the terms of the LGPL.
+
+----------------------------------------------------------------------------
+
                   GNU LESSER GENERAL PUBLIC LICENSE
                        Version 2.1, February 1999
 
diff --git a/c/hsgclosure.c b/c/hsgclosure.c
--- a/c/hsgclosure.c
+++ b/c/hsgclosure.c
@@ -26,13 +26,21 @@
   A mutex protecting the log file handle. We make it recursive,
   i.e. refcounted, so it is OK to lock repeatedly in the same thread.
 */
-static pthread_mutex_t log_mutex =
+static pthread_mutex_t log_mutex
 #if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
-  PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+  = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
 #elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER)
-  PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
+  = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
 #else
-  #error "Recursive mutex initializers not supported on this platform."
+  ;
+__attribute__ ((constructor)) static void init_log_mutex()
+{
+  pthread_mutexattr_t attr;
+  pthread_mutexattr_init(&attr);
+  pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+  pthread_mutex_init(&log_mutex, &attr);
+  pthread_mutexattr_destroy(&attr);
+}
 #endif
 
 /* Give the current thread exclusive access to the log */
diff --git a/haskell-gi-base.cabal b/haskell-gi-base.cabal
--- a/haskell-gi-base.cabal
+++ b/haskell-gi-base.cabal
@@ -1,5 +1,5 @@
 name:                haskell-gi-base
-version:             0.21.4
+version:             0.21.5
 synopsis:            Foundation for libraries generated by haskell-gi
 description:         Foundation for libraries generated by haskell-gi
 homepage:            https://github.com/haskell-gi/haskell-gi-base
@@ -9,7 +9,7 @@
 author:              Will Thompson,
                      Iñaki García Etxebarria,
                      Jonas Platte
-maintainer:          Iñaki García Etxebarria (garetxe@gmail.com)
+maintainer:          Iñaki García Etxebarria (inaki@blueleaf.cc)
 stability:           Experimental
 category:            Development
 build-type:          Simple
