[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r1837 - in gnunet-gtk/src: common core include plugins/fs
From: |
grothoff |
Subject: |
[GNUnet-SVN] r1837 - in gnunet-gtk/src: common core include plugins/fs |
Date: |
Sun, 21 Aug 2005 19:50:39 -0700 (PDT) |
Author: grothoff
Date: 2005-08-21 19:50:38 -0700 (Sun, 21 Aug 2005)
New Revision: 1837
Modified:
gnunet-gtk/src/common/helper.c
gnunet-gtk/src/core/main.c
gnunet-gtk/src/include/gnunetgtk_common.h
gnunet-gtk/src/plugins/fs/download.c
Log:
deadlock in download abort plus code cleanup
Modified: gnunet-gtk/src/common/helper.c
===================================================================
--- gnunet-gtk/src/common/helper.c 2005-08-22 02:38:20 UTC (rev 1836)
+++ gnunet-gtk/src/common/helper.c 2005-08-22 02:50:38 UTC (rev 1837)
@@ -447,4 +447,38 @@
MUTEX_DESTROY(&sclock);
}
+struct rwsc_closure {
+ Semaphore * sig;
+ PThreadMain realMain;
+ void * arg;
+};
+
+static void * shutdownCode(void * arg) {
+ struct rwsc_closure * cls = arg;
+ void * ret;
+
+ ret = cls->realMain(cls->arg);
+ SEMAPHORE_UP(cls->sig);
+ return ret;
+}
+
+void run_with_save_calls(PThreadMain cb,
+ void * arg) {
+ PTHREAD_T doneThread;
+ Semaphore * sig;
+ void * unused;
+
+ sig = SEMAPHORE_NEW(0);
+ if (0 != PTHREAD_CREATE(&doneThread,
+ &shutdownCode,
+ sig,
+ 64*1024))
+ DIE_STRERROR("pthread_create");
+ while (OK != SEMAPHORE_DOWN_NONBLOCKING(sig))
+ gtkRunSomeSaveCalls();
+ PTHREAD_JOIN(&doneThread,
+ &unused);
+ SEMAPHORE_FREE(sig);
+}
+
/* end of helper.c */
Modified: gnunet-gtk/src/core/main.c
===================================================================
--- gnunet-gtk/src/core/main.c 2005-08-22 02:38:20 UTC (rev 1836)
+++ gnunet-gtk/src/core/main.c 2005-08-22 02:50:38 UTC (rev 1837)
@@ -88,20 +88,15 @@
return OK;
}
-static void * shutdownCode(void * arg) {
- Semaphore * sig = arg;
+static void * shutdownCode(void * unused) {
stopCron();
doneGNUnetGTKCommon();
- SEMAPHORE_UP(sig);
return NULL;
}
int main(int argc,
char *argv[]) {
GtkWidget * root;
- PTHREAD_T doneThread;
- Semaphore * sig;
- void * unused;
g_thread_init(NULL);
gtk_init(&argc, &argv);
@@ -133,18 +128,8 @@
gtk_main();
gdk_threads_leave();
setCustomLogProc(NULL);
-
- sig = SEMAPHORE_NEW(0);
- if (0 != PTHREAD_CREATE(&doneThread,
- &shutdownCode,
- sig,
- 64*1024))
- DIE_STRERROR("pthread_create");
- while (OK != SEMAPHORE_DOWN_NONBLOCKING(sig))
- gtkRunSomeSaveCalls();
- PTHREAD_JOIN(&doneThread,
- &unused);
- SEMAPHORE_FREE(sig);
+ run_with_save_calls(&shutdownCode,
+ NULL);
doneUtil();
return 0;
Modified: gnunet-gtk/src/include/gnunetgtk_common.h
===================================================================
--- gnunet-gtk/src/include/gnunetgtk_common.h 2005-08-22 02:38:20 UTC (rev
1836)
+++ gnunet-gtk/src/include/gnunetgtk_common.h 2005-08-22 02:50:38 UTC (rev
1837)
@@ -80,6 +80,15 @@
int gtkRunSomeSaveCalls();
/**
+ * Run the given "cb" function and save calls
+ * in parallel (used within the event loop to
+ * keep save calls going while something else
+ * happens).
+ */
+void run_with_save_calls(PThreadMain cb,
+ void * arg);
+
+/**
* Bind handlers defined by the various
* plugins to the signals defined by the
* Glade XML.
Modified: gnunet-gtk/src/plugins/fs/download.c
===================================================================
--- gnunet-gtk/src/plugins/fs/download.c 2005-08-22 02:38:20 UTC (rev
1836)
+++ gnunet-gtk/src/plugins/fs/download.c 2005-08-22 02:50:38 UTC (rev
1837)
@@ -413,15 +413,14 @@
NULL);
}
-static void abortDownloadCallback(GtkTreeModel * model,
- GtkTreePath * path,
- GtkTreeIter * iter,
- GtkTreeStore * tree) {
+static void * shutdownCode(void * it) {
+ GtkTreeModel * model;
+ GtkTreeIter * iter = it;
struct ECRS_URI * u;
char * fn;
- GNUNET_ASSERT(model == GTK_TREE_MODEL(summary));
- gtk_tree_model_get(GTK_TREE_MODEL(summary),
+ model = GTK_TREE_MODEL(summary);
+ gtk_tree_model_get(model,
iter,
DOWNLOAD_URI, &u,
DOWNLOAD_FILENAME, &fn,
@@ -433,8 +432,18 @@
iter);
if (u != NULL)
ECRS_freeUri(u);
+ return NULL;
}
+static void abortDownloadCallback(GtkTreeModel * model,
+ GtkTreePath * path,
+ GtkTreeIter * iter,
+ GtkTreeStore * tree) {
+ GNUNET_ASSERT(model == GTK_TREE_MODEL(summary));
+ run_with_save_calls(&shutdownCode,
+ iter);
+}
+
void on_abortDownloadButton_clicked(void * unused,
GtkWidget * clearButton) {
GtkTreeSelection * selection;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r1837 - in gnunet-gtk/src: common core include plugins/fs,
grothoff <=