Files
RedBear-OS/local/recipes/libs/glib/source/gobject/tests/object.c
T
vasilito cee25393d8 fix: boot process improvements — dependency cycle, INIT_NOTIFY, probing loop, and log spam fixes
- Fix P15-8-init-cycle-detection.patch: replace visiting+error with seen+silent-skip
  to eliminate 11 false-positive 'dependency cycle detected' errors on shared deps
- Fix P0-daemon-fix-init-notify-unwrap.patch: remove eprintln! for missing
  INIT_NOTIFY (expected for oneshot_async services, ~7 daemons affected)
- Fix driver-manager hotplug loop: add PERMANENTLY_SKIPPED static set shared
  between hotplug handler and DriverConfig::probe() to stop infinite re-probing
  of Fatal/NotSupported/deferred-exhausted device+driver pairs (e.g. ided)
- Fix driver-manager log_timeline: suppress repeated EPIPE/ENOENT errors with
  AtomicI32 dedup and AtomicBool one-shot guards for boot timeline JSON
- Add driver-manager SIGTERM handler, ACPI bus registration, --status mode,
  driver reap loop, graceful shutdown, and reduced deferred retries (30→3)
2026-05-17 12:34:02 +03:00

156 lines
4.0 KiB
C

#include <glib-object.h>
/* --------------------------------- */
/* test_object_constructor_singleton */
typedef GObject MySingletonObject;
typedef GObjectClass MySingletonObjectClass;
GType my_singleton_object_get_type (void);
G_DEFINE_TYPE (MySingletonObject, my_singleton_object, G_TYPE_OBJECT)
static MySingletonObject *singleton;
static void
my_singleton_object_init (MySingletonObject *obj)
{
}
static GObject *
my_singleton_object_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params)
{
GObject *object;
if (singleton)
return g_object_ref (singleton);
object = G_OBJECT_CLASS (my_singleton_object_parent_class)->
constructor (type, n_construct_properties, construct_params);
singleton = (MySingletonObject *)object;
return object;
}
static void
my_singleton_object_finalize (MySingletonObject *obj)
{
singleton = NULL;
G_OBJECT_CLASS (my_singleton_object_parent_class)->finalize (obj);
}
static void
my_singleton_object_class_init (MySingletonObjectClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructor = my_singleton_object_constructor;
object_class->finalize = my_singleton_object_finalize;
}
static void
test_object_constructor_singleton (void)
{
MySingletonObject *one, *two, *three;
one = g_object_new (my_singleton_object_get_type (), NULL);
g_assert_cmpint (G_OBJECT (one)->ref_count, ==, 1);
two = g_object_new (my_singleton_object_get_type (), NULL);
g_assert (one == two);
g_assert_cmpint (G_OBJECT (two)->ref_count, ==, 2);
three = g_object_new (my_singleton_object_get_type (), NULL);
g_assert (one == three);
g_assert_cmpint (G_OBJECT (three)->ref_count, ==, 3);
g_object_add_weak_pointer (G_OBJECT (one), (gpointer *)&one);
g_object_unref (one);
g_assert (one != NULL);
g_object_unref (three);
g_object_unref (two);
g_assert (one == NULL);
}
/* ----------------------------------- */
/* test_object_constructor_infanticide */
typedef GObject MyInfanticideObject;
typedef GObjectClass MyInfanticideObjectClass;
GType my_infanticide_object_get_type (void);
G_DEFINE_TYPE (MyInfanticideObject, my_infanticide_object, G_TYPE_OBJECT)
static void
my_infanticide_object_init (MyInfanticideObject *obj)
{
}
static GObject *
my_infanticide_object_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (my_infanticide_object_parent_class)->
constructor (type, n_construct_properties, construct_params);
g_object_unref (object);
return NULL;
}
static void
my_infanticide_object_class_init (MyInfanticideObjectClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructor = my_infanticide_object_constructor;
}
static void
test_object_constructor_infanticide (void)
{
GObject *obj;
int i;
#ifndef G_ENABLE_DEBUG
g_test_skip ("skip tests that rely on debug-only warnings");
return;
#endif
g_test_bug ("https://bugzilla.gnome.org/show_bug.cgi?id=661576");
for (i = 0; i < 1000; i++)
{
g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_CRITICAL,
"*finalized while still in-construction*");
g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_CRITICAL,
"*Custom constructor*returned NULL*");
obj = g_object_new (my_infanticide_object_get_type (), NULL);
g_assert_null (obj);
g_test_assert_expected_messages ();
}
}
/* --------------------------------- */
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/object/constructor/singleton", test_object_constructor_singleton);
g_test_add_func ("/object/constructor/infanticide", test_object_constructor_infanticide);
return g_test_run ();
}