I just looked on github. The handle is not copied/cloned in any way when passed to the ctor. As such, this patch looks like it's freeing the native handle and then immediately using it. It should probably be written as:
try {
    return (TreePath[]) GLib.Marshaller.ListToArray (list, typeof (Gtk.TreePath));
} finally {
   g_list_free (list_ptr);
}