aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/fs/upload.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2006-12-10 06:27:55 +0000
committerChristian Grothoff <christian@grothoff.org>2006-12-10 06:27:55 +0000
commit16fdea53d4f80a9e8ced817ec270dd46816e21b8 (patch)
tree254d414c987222c9efe946529657ec2b032340d8 /src/plugins/fs/upload.c
parent738b5eba3f7eb5daadef7c1d19e338a198cb2b48 (diff)
downloadgnunet-gtk-16fdea53d4f80a9e8ced817ec270dd46816e21b8.tar.gz
gnunet-gtk-16fdea53d4f80a9e8ced817ec270dd46816e21b8.zip
fixing deadlocks
Diffstat (limited to 'src/plugins/fs/upload.c')
-rw-r--r--src/plugins/fs/upload.c96
1 files changed, 61 insertions, 35 deletions
diff --git a/src/plugins/fs/upload.c b/src/plugins/fs/upload.c
index aa800b34..f5b922f6 100644
--- a/src/plugins/fs/upload.c
+++ b/src/plugins/fs/upload.c
@@ -316,16 +316,48 @@ void on_fileInformationKeywordEntry_changed_fs(gpointer dummy2,
316 strlen(input) > 0); 316 strlen(input) > 0);
317} 317}
318 318
319typedef struct {
320 const char * filename;
321 unsigned int anonymity;
322 unsigned int priority;
323 int index;
324 int extract;
325 int deep_index;
326 cron_t expire;
327 struct ECRS_MetaData * meta;
328 struct ECRS_URI * gkeywordURI;
329 struct ECRS_URI * keywordURI;
330} FSUC;
331
332static void * start_upload_helper(void * cls) {
333 FSUC * fsuc = cls;
334
335 FSUI_startUpload(ctx,
336 fsuc->filename,
337 (DirectoryScanCallback) &disk_directory_scan,
338 ectx,
339 fsuc->anonymity,
340 fsuc->priority,
341 fsuc->index,
342 fsuc->extract,
343 fsuc->deep_index,
344 fsuc->expire,
345 fsuc->meta,
346 fsuc->gkeywordURI,
347 fsuc->keywordURI);
348 return NULL;
349}
350
351
319void on_fsinsertuploadbutton_clicked_fs(gpointer dummy, 352void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
320 GtkWidget * uploadButton) { 353 GtkWidget * uploadButton) {
354 FSUC fsuc;
321 const char * filenamerest; 355 const char * filenamerest;
322 const char * filename;
323 GtkWidget * dialog; 356 GtkWidget * dialog;
324 EXTRACTOR_ExtractorList * extractors; 357 EXTRACTOR_ExtractorList * extractors;
325 char * config; 358 char * config;
326 struct ECRS_URI * keywordURI;
327 struct ECRS_URI * gkeywordURI;
328 struct ECRS_MetaData * meta; 359 struct ECRS_MetaData * meta;
360 struct ECRS_URI * keywordURI;
329 361
330 extractors = EXTRACTOR_loadDefaultLibraries(); 362 extractors = EXTRACTOR_loadDefaultLibraries();
331 config = NULL; 363 config = NULL;
@@ -340,8 +372,8 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
340 FREE(config); 372 FREE(config);
341 } 373 }
342 374
343 filename = getEntryLineValue(getMainXML(), 375 fsuc.filename = getEntryLineValue(getMainXML(),
344 "uploadFilenameComboBoxEntry"); 376 "uploadFilenameComboBoxEntry");
345 metaXML 377 metaXML
346 = glade_xml_new(getGladeFileName(), 378 = glade_xml_new(getGladeFileName(),
347 "metaDataDialog", 379 "metaDataDialog",
@@ -352,11 +384,11 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
352 meta = ECRS_createMetaData(); 384 meta = ECRS_createMetaData();
353 ECRS_extractMetaData(ectx, 385 ECRS_extractMetaData(ectx,
354 meta, 386 meta,
355 filename, 387 fsuc.filename,
356 extractors); 388 extractors);
357 EXTRACTOR_removeAll(extractors); 389 EXTRACTOR_removeAll(extractors);
358 filenamerest = &filename[strlen(filename)-1]; 390 filenamerest = &fsuc.filename[strlen(fsuc.filename)-1];
359 while ( (filenamerest > filename) && 391 while ( (filenamerest > fsuc.filename) &&
360 (filenamerest[-1] != DIR_SEPARATOR) ) 392 (filenamerest[-1] != DIR_SEPARATOR) )
361 filenamerest--; 393 filenamerest--;
362 ECRS_addToMetaData(meta, 394 ECRS_addToMetaData(meta,
@@ -397,36 +429,30 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
397 gtk_dialog_set_default_response(GTK_DIALOG(dialog), 429 gtk_dialog_set_default_response(GTK_DIALOG(dialog),
398 GTK_RESPONSE_OK); 430 GTK_RESPONSE_OK);
399 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) { 431 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) {
400 meta = getMetaDataFromList(metaXML, 432 fsuc.anonymity = getSpinButtonValue(getMainXML(),
401 "metaDataDialogMetaDataList", 433 "uploadAnonymityLevelSpinButton");
402 "previewImage"); 434 fsuc.priority = getSpinButtonValue(getMainXML(),
403 keywordURI = getKeywordURIFromList(metaXML, 435 "contentPrioritySpinButton");
436 fsuc.index = getToggleButtonValue(getMainXML(),
437 "indexbutton");
438 fsuc.extract = getToggleButtonValue(getMainXML(),
439 "doExtractCheckButton");
440 fsuc.deep_index = getToggleButtonValue(getMainXML(),
441 "deepIndexCheckButton");
442 fsuc.expire = get_time() + 2 * cronYEARS;
443 fsuc.meta = getMetaDataFromList(metaXML,
444 "metaDataDialogMetaDataList",
445 "previewImage");
446 fsuc.keywordURI = getKeywordURIFromList(metaXML,
404 "metaDataDialogKeywordList"); 447 "metaDataDialogKeywordList");
405 gkeywordURI = ECRS_stringToUri(ectx, 448 fsuc.gkeywordURI = ECRS_stringToUri(ectx,
406 ECRS_URI_PREFIX 449 ECRS_URI_PREFIX
407 ECRS_SEARCH_INFIX); 450 ECRS_SEARCH_INFIX);
408 /* FIXME: DEADLOCK! */ 451 run_with_save_calls(&start_upload_helper,
409 FSUI_startUpload(ctx, 452 &fsuc);
410 filename, 453 ECRS_freeMetaData(fsuc.meta);
411 (DirectoryScanCallback) &disk_directory_scan, 454 ECRS_freeUri(fsuc.gkeywordURI);
412 ectx, 455 ECRS_freeUri(fsuc.keywordURI);
413 getSpinButtonValue(getMainXML(),
414 "uploadAnonymityLevelSpinButton"),
415 getSpinButtonValue(getMainXML(),
416 "contentPrioritySpinButton"),
417 getToggleButtonValue(getMainXML(),
418 "indexbutton"),
419 getToggleButtonValue(getMainXML(),
420 "doExtractCheckButton"),
421 getToggleButtonValue(getMainXML(),
422 "deepIndexCheckButton"),
423 get_time() + 2 * cronYEARS,
424 meta,
425 gkeywordURI,
426 keywordURI);
427 ECRS_freeMetaData(meta);
428 ECRS_freeUri(gkeywordURI);
429 ECRS_freeUri(keywordURI);
430 } 456 }
431 gtk_widget_destroy (dialog); 457 gtk_widget_destroy (dialog);
432 UNREF(metaXML); 458 UNREF(metaXML);