void transfer_control_destroy(transfer_control_t * TransferControl) { GlobusGFSName(__func__); GlobusGFSHpssDebugEnter(); if (TransferControl != NULL) { /* Unregister to receive messages. */ msg_unregister(TransferControl->MsgHandle, TransferControl->MsgRegisterID); /* Destroy the PIO control handle. */ pio_control_destroy(TransferControl->PioControl); /* * Temp workaround to make sure the thread that called us isn't still * holding this lock. */ globus_mutex_lock(&TransferControl->Lock); globus_mutex_unlock(&TransferControl->Lock); /* Dellocate the lock. */ globus_mutex_destroy(&TransferControl->Lock); /* Destroy the transfer range list. */ range_list_destroy(TransferControl->TransferRangeList); /* Deallocate our handle. */ globus_free(TransferControl); } GlobusGFSHpssDebugExit(); }
void gridftp_destroy(gridftp_t * GridFTP) { GlobusGFSName(__func__); GlobusGFSHpssDebugEnter(); if (GridFTP != NULL) { /* Destroy the file range lists. */ range_list_destroy(GridFTP->StreamRanges); globus_mutex_destroy(&GridFTP->Lock); globus_cond_destroy(&GridFTP->Cond); globus_free(GridFTP); } GlobusGFSHpssDebugExit(); }
/** * global_range_list_parse: * @sheet: Sheet where the range specification is relatively parsed to * @str : a range or list of ranges to parse (ex: "A1", "A1:B1,C2,Sheet2!D2:D4") * * Parses a list of ranges, relative to the @sheet and returns a list with the * results. * * Returns a GSList containing Values of type VALUE_CELLRANGE, or NULL on failure **/ GSList * global_range_list_parse (Sheet *sheet, char const *str) { GnmParsePos pp; GnmExprTop const *texpr; GSList *ranges = NULL; GnmValue *v; g_return_val_if_fail (IS_SHEET (sheet), NULL); g_return_val_if_fail (str != NULL, NULL); texpr = gnm_expr_parse_str (str, parse_pos_init_sheet (&pp, sheet), GNM_EXPR_PARSE_FORCE_EXPLICIT_SHEET_REFERENCES | GNM_EXPR_PARSE_PERMIT_MULTIPLE_EXPRESSIONS | GNM_EXPR_PARSE_UNKNOWN_NAMES_ARE_STRINGS, NULL, NULL); if (texpr != NULL) { if (GNM_EXPR_GET_OPER (texpr->expr) == GNM_EXPR_OP_SET) { GnmExpr const *expr = texpr->expr; int i; for (i = 0; i < expr->set.argc; i++) { v = gnm_expr_get_range (expr->set.argv[i]); if (v == NULL) { range_list_destroy (ranges); ranges = NULL; break; } else ranges = g_slist_prepend (ranges, v); } } else { v = gnm_expr_top_get_range (texpr); if (v != NULL) ranges = g_slist_prepend (ranges, v); } gnm_expr_top_unref (texpr); } return g_slist_reverse (ranges); }
static void cb_merge_merge_clicked (G_GNUC_UNUSED GtkWidget *ignore, MergeState *state) { GtkTreeIter this_iter; gint n = 0; char *data_string = NULL, *field_string = NULL; GSList *data_list = NULL, *field_list = NULL; GnmValue *v_zone; gint field_problems = 0; gint min_length = gnm_sheet_get_max_rows (state->sheet); gint max_length = 0; v_zone = gnm_expr_entry_parse_as_value (state->zone, state->sheet); g_return_if_fail (v_zone != NULL); while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (state->model), &this_iter, NULL, n)) { GnmValue *v_data, *v_field; gtk_tree_model_get (GTK_TREE_MODEL (state->model), &this_iter, DATA_RANGE, &data_string, FIELD_LOCATION, &field_string, -1); v_data = value_new_cellrange_str (state->sheet, data_string); v_field = value_new_cellrange_str (state->sheet, field_string); g_free (data_string); g_free (field_string); g_return_if_fail (v_data != NULL && v_field != NULL); if (!global_range_contained (state->sheet, v_field, v_zone)) field_problems++; data_list = g_slist_prepend (data_list, v_data); field_list = g_slist_prepend (field_list, v_field); n++; } if (field_problems > 0) { char *text; if (field_problems == 1) text = g_strdup (_("One field is not part of the merge zone!")); else text = g_strdup_printf (_("%i fields are not part of the merge zone!"), field_problems); go_gtk_notice_nonmodal_dialog ((GtkWindow *) state->dialog, &(state->warning_dialog), GTK_MESSAGE_ERROR, "%s", text); g_free (text); value_release (v_zone); range_list_destroy (data_list); range_list_destroy (field_list); return; } g_slist_foreach (data_list, cb_merge_find_shortest_column, &min_length); g_slist_foreach (data_list, cb_merge_find_longest_column, &max_length); if (min_length < max_length) { char *text = g_strdup_printf (_("The data columns range in length from " "%i to %i. Shall we trim the lengths to " "%i and proceed?"), min_length, max_length, min_length); if (go_gtk_query_yes_no (GTK_WINDOW (state->dialog), TRUE, "%s", text)) { g_slist_foreach (data_list, cb_merge_trim_data, &min_length); g_free (text); } else { g_free (text); value_release (v_zone); range_list_destroy (data_list); range_list_destroy (field_list); return; } } if (!cmd_merge_data (WORKBOOK_CONTROL (state->wbcg), state->sheet, v_zone, field_list, data_list)) gtk_widget_destroy (state->dialog); }