Get rid of global session.

This commit is contained in:
Bert Vermeulen 2014-07-21 15:08:17 +02:00
parent 102f123966
commit 3337e9a1c9
3 changed files with 11 additions and 27 deletions

View File

@ -27,8 +27,6 @@
#define LOG_PREFIX "backend"
/** @endcond */
extern struct sr_session *sr_current_session;
/**
* @mainpage libsigrok API
*
@ -360,7 +358,6 @@ SR_API int sr_init(struct sr_context **ctx)
*ctx = context;
context = NULL;
sr_current_session = NULL;
ret = SR_OK;
done:

View File

@ -127,8 +127,6 @@ static struct sr_config_info sr_config_info_data[] = {
{0, 0, NULL, NULL, NULL},
};
extern struct sr_session *sr_current_session;
/**
* Return the list of supported hardware drivers.
*

View File

@ -59,10 +59,6 @@ struct datafeed_callback {
void *cb_data;
};
/* There can currently only be one session at a time. */
/* 'sr_current_session' is not static, it's used elsewhere (via 'extern'). */
struct sr_session *sr_current_session;
/**
* Create a new session.
* Currently, there can be only one session at a time within the same process.
@ -72,21 +68,18 @@ struct sr_session *sr_current_session;
*
* @since 0.4.0
*/
SR_API int sr_session_new(struct sr_session **session)
SR_API int sr_session_new(struct sr_session **new_session)
{
if (sr_current_session) {
sr_err("%s: session already exists", __func__);
return SR_ERR_BUG;
}
struct sr_session *session;
sr_current_session = g_malloc0(sizeof(struct sr_session));
session = g_malloc0(sizeof(struct sr_session));
sr_current_session->source_timeout = -1;
sr_current_session->running = FALSE;
sr_current_session->abort_session = FALSE;
g_mutex_init(&sr_current_session->stop_mutex);
session->source_timeout = -1;
session->running = FALSE;
session->abort_session = FALSE;
g_mutex_init(&session->stop_mutex);
*session = sr_current_session;
*new_session = session;
return SR_OK;
}
@ -114,9 +107,6 @@ SR_API int sr_session_destroy(struct sr_session *session)
g_free(session);
if (session == sr_current_session)
sr_current_session = NULL;
return SR_OK;
}
@ -342,9 +332,8 @@ SR_API int sr_session_trigger_set(struct sr_session *session, struct sr_trigger
* @retval SR_OK Success.
* @retval SR_ERR Error occured.
*/
static int sr_session_iteration(gboolean block)
static int sr_session_iteration(struct sr_session *session, gboolean block)
{
struct sr_session *session = sr_current_session;
unsigned int i;
int ret;
@ -501,7 +490,7 @@ SR_API int sr_session_run(struct sr_session *session)
} else {
/* Real sources, use g_poll() main loop. */
while (session->num_sources)
sr_session_iteration(TRUE);
sr_session_iteration(session, TRUE);
}
return SR_OK;
@ -649,7 +638,7 @@ SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
return SR_ERR_ARG;
}
for (l = sr_current_session->datafeed_callbacks; l; l = l->next) {
for (l = sdi->session->datafeed_callbacks; l; l = l->next) {
if (sr_log_loglevel_get() >= SR_LOG_DBG)
datafeed_dump(packet);
cb_struct = l->data;