Commit 48c976f5ef66a1880c586fb18af578dbbd59b3a7
1 parent
3d6bf4b9
Exists in
master
and in
1 other branch
Fixing exit hang.
Showing
1 changed file
with
23 additions
and
4 deletions
Show diff stats
src/terminal/widget.c
... | ... | @@ -184,6 +184,18 @@ static void v3270_toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3 |
184 | 184 | { |
185 | 185 | } |
186 | 186 | |
187 | +static gboolean delayed_cleanup(H3270 *hSession) { | |
188 | + | |
189 | + if(lib3270_get_task_count(hSession)) | |
190 | + return G_SOURCE_CONTINUE; | |
191 | + | |
192 | + g_message("Delayed cleanup complete"); | |
193 | + lib3270_free(hSession); | |
194 | + | |
195 | + return G_SOURCE_REMOVE; | |
196 | + | |
197 | +} | |
198 | + | |
187 | 199 | static void finalize(GObject *object) { |
188 | 200 | |
189 | 201 | debug("V3270::%s",__FUNCTION__); |
... | ... | @@ -196,13 +208,18 @@ static void finalize(GObject *object) { |
196 | 208 | lib3270_disconnect(terminal->host); |
197 | 209 | |
198 | 210 | debug("Task count: %u",lib3270_get_task_count(terminal->host)); |
199 | - while(lib3270_get_task_count(terminal->host)) | |
211 | + if(lib3270_get_task_count(terminal->host)) | |
212 | + { | |
213 | + // Should wait. | |
214 | + g_message("TN3270 session is busy, delaying cleanup"); | |
215 | + lib3270_set_user_data(terminal->host,NULL); | |
216 | + g_idle_add((GSourceFunc) delayed_cleanup,terminal->host); | |
217 | + } | |
218 | + else | |
200 | 219 | { |
201 | - debug("%s: waiting",__FUNCTION__); | |
202 | - usleep(100); | |
220 | + lib3270_session_free(terminal->host); | |
203 | 221 | } |
204 | 222 | |
205 | - lib3270_session_free(terminal->host); | |
206 | 223 | terminal->host = NULL; |
207 | 224 | } |
208 | 225 | |
... | ... | @@ -608,6 +625,8 @@ static void v3270_destroy(GtkWidget *widget) |
608 | 625 | // Cleanup |
609 | 626 | lib3270_reset_callbacks(terminal->host); |
610 | 627 | lib3270_set_user_data(terminal->host,NULL); |
628 | + | |
629 | + debug("%s: disconnecting", __FUNCTION__); | |
611 | 630 | lib3270_disconnect(terminal->host); |
612 | 631 | } |
613 | 632 | ... | ... |