コード例 #1
0
ファイル: session.c プロジェクト: AkosLukacs/DSLogic
/**
 * Destroy the current session.
 *
 * This frees up all memory used by the session.
 *
 * @return SR_OK upon success, SR_ERR_BUG if no session exists.
 */
SR_API int sr_session_destroy(void)
{
	if (!session) {
		sr_err("%s: session was NULL", __func__);
		return SR_ERR_BUG;
	}

	sr_session_dev_remove_all();

    sr_session_datafeed_callback_remove_all();

    if (session->sources) {
        g_free(session->sources);
        session->sources = NULL;
    }

    if (session->pollfds) {
        g_free(session->pollfds);
        session->pollfds = NULL;
    }

	/* TODO: Error checks needed? */

//	g_mutex_clear(&session->stop_mutex);

	g_free(session);
	session = NULL;

	return SR_OK;
}
コード例 #2
0
ファイル: session.c プロジェクト: jfrkuska/sigrok
/**
 * Destroy the current session.
 *
 * This frees up all memory used by the session.
 *
 * @return SR_OK upon success, SR_ERR_BUG if no session exists.
 */
SR_API int sr_session_destroy(void)
{
	if (!session) {
		sr_err("%s: session was NULL", __func__);
		return SR_ERR_BUG;
	}

	sr_session_dev_remove_all();

	/* TODO: Error checks needed? */

	g_free(session);
	session = NULL;

	return SR_OK;
}
コード例 #3
0
ファイル: session.c プロジェクト: jeras/sigrok
/**
 * Destroy the current session.
 *
 * This frees up all memory used by the session.
 *
 * @return SR_OK upon success, SR_ERR_BUG if no session exists.
 */
SR_API int sr_session_destroy(void)
{
	if (!session) {
		sr_err("session: %s: session was NULL", __func__);
		return SR_ERR_BUG;
	}

	sr_session_dev_remove_all();

	/* TODO: Error checks needed? */

	/* TODO: Loop over protocol decoders and free them. */

	g_free(session);
	session = NULL;

	return SR_OK;
}
コード例 #4
0
ファイル: session.c プロジェクト: klauspetersen/trace_fast
/**
 * Destroy a session.
 * This frees up all memory used by the session.
 *
 * @param session The session to destroy. Must not be NULL.
 *
 * @retval SR_OK Success.
 * @retval SR_ERR_ARG Invalid session passed.
 *
 * @since 0.4.0
 */
SR_API int sr_session_destroy(struct sr_session *session)
{
	if (!session) {
		sr_err("%s: session was NULL", __func__);
		return SR_ERR_ARG;
	}

	sr_session_dev_remove_all(session);
	g_slist_free_full(session->owned_devs, (GDestroyNotify)sr_dev_inst_free);

	g_hash_table_unref(session->event_sources);

	g_mutex_clear(&session->main_mutex);

	g_free(session);

	return SR_OK;
}
コード例 #5
0
ファイル: devselect.c プロジェクト: jeras/sigrok
static void dev_selected(GtkComboBox *devbox, GObject *parent)
{
	GtkTreeModel *devlist = gtk_combo_box_get_model(devbox);
	GtkEntry *timesamples = g_object_get_data(parent, "timesamples");
	GtkComboBox *timeunit = g_object_get_data(parent, "timeunit");
	GtkTreeIter iter;
	const gchar *name;
	GtkCheckMenuItem *menuitem;
	struct sr_dev *dev;

	if (!gtk_combo_box_get_active_iter(devbox, &iter)) {
		g_object_set_data(parent, "dev", NULL);
		return;
	}
	gtk_tree_model_get(devlist, &iter, 0, &name, 1, &dev,
				2, &menuitem, -1);

	gtk_check_menu_item_set_active(menuitem, TRUE);

	sr_session_dev_remove_all();
	if (sr_session_dev_add(dev) != SR_OK) {
		g_critical("Failed to use device.");
		sr_session_destroy();
		dev = NULL;
	}
	g_object_set_data(parent, "dev", dev);

	/*
	 * Grey out the time unless the device is valid,
	 * and it supports sample limiting
	 */
	const gboolean limit_samples = dev &&
		sr_driver_hwcap_exists(dev->driver,
		SR_HWCAP_LIMIT_SAMPLES);
	gtk_widget_set_sensitive((GtkWidget*)timesamples, limit_samples);
	gtk_widget_set_sensitive((GtkWidget*)timeunit, limit_samples);
}