~agateau/lightdm/lightdm-defaults

« back to all changes in this revision

Viewing changes to src/display-manager.c

  • Committer: Robert Ancell
  • Date: 2011-12-21 06:12:41 UTC
  • Revision ID: robert.ancell@canonical.com-20111221061241-96igxbx7bfqdhx8d
Fix crash when quitting with newer GLib

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
static void
73
73
seat_stopped_cb (Seat *seat, DisplayManager *manager)
74
74
{
 
75
    g_debug ("seat-stopped");
 
76
 
75
77
    manager->priv->seats = g_list_remove (manager->priv->seats, seat);
76
78
    g_signal_handlers_disconnect_matched (seat, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, manager);
77
79
 
78
 
    check_stopped (manager);
79
 
 
80
80
    if (!manager->priv->stopping)
81
81
        g_signal_emit (manager, signals[SEAT_REMOVED], 0, seat);
82
82
 
83
83
    g_object_unref (seat);
 
84
 
 
85
    check_stopped (manager);
84
86
}
85
87
 
86
88
gboolean
88
90
{
89
91
    gboolean result;
90
92
 
 
93
    g_return_val_if_fail (!manager->priv->stopping, FALSE);
 
94
 
91
95
    result = seat_start (SEAT (seat));
92
96
    if (!result)
93
97
        return FALSE;
126
130
 
127
131
    manager->priv->stopping = TRUE;
128
132
 
129
 
    check_stopped (manager);
130
133
    for (link = manager->priv->seats; link; link = link->next)
131
134
    {
132
135
        Seat *seat = link->data;
133
136
        seat_stop (seat);
134
137
    }
 
138
 
 
139
    check_stopped (manager);
135
140
}
136
141
  
137
142
static void
148
153
display_manager_finalize (GObject *object)
149
154
{
150
155
    DisplayManager *self;
 
156
    GList *link;
151
157
 
152
158
    self = DISPLAY_MANAGER (object);
153
159
 
 
160
    for (link = self->priv->seats; link; link = link->next)
 
161
    {
 
162
        Seat *seat = link->data;
 
163
        g_signal_handlers_disconnect_matched (seat, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
 
164
    }
154
165
    g_list_free_full (self->priv->seats, g_object_unref);
155
166
 
156
167
    G_OBJECT_CLASS (display_manager_parent_class)->finalize (object);