Beispiel #1
0
void mbb_session_del_var(struct mbb_var *var)
{
	mbb_plock_writer_lock();

	g_queue_remove(&var_queue, var);

	if (ht != NULL) {
		struct mbb_session_var *priv;
		struct mbb_session *ss;
		GHashTableIter iter;

		priv = mbb_var_get_priv(var);

		g_hash_table_iter_init(&iter, ht);
		while (g_hash_table_iter_next(&iter, NULL, (gpointer *) &ss)) {
			gpointer data;

			if (session_lookup_var(ss, var, &data)) {
				if (priv->op_free != NULL)
					priv->op_free(data);

				g_hash_table_remove(ss->vars, var);
			}
		}
	}

	mbb_plock_writer_unlock();
}
Beispiel #2
0
guint mbb_session_new(struct mbb_session *ss, gchar *peer, guint port, mbb_session_type type)
{
	guint sid;

	ss->user = NULL;
	ss->peer = g_strdup(peer);
	ss->port = port;
	ss->type = type;

	time(&ss->start);
	ss->mtime = ss->start;

	ss->killed = FALSE;
	ss->kill_msg = NULL;

	session_vars_init(ss);

	mbb_plock_writer_lock();

	sid = session_id++;
	if (ht == NULL)
		ht_init();

	g_hash_table_insert(ht, GINT_TO_POINTER(sid), ss);

	mbb_plock_writer_unlock();

	return sid;
}
Beispiel #3
0
void mbb_session_quit(guint sid)
{
	mbb_plock_writer_lock();

	if (ht != NULL)
		g_hash_table_remove(ht, GINT_TO_POINTER(sid));

	mbb_plock_writer_unlock();
}
Beispiel #4
0
static void mbb_task_free(struct mbb_task *task)
{
	mbb_plock_writer_lock();

	if (ht != NULL)
		g_hash_table_remove(ht, GINT_TO_POINTER(task->id));

	mbb_plock_writer_unlock();

	mbb_module_unuse(task->mod);
	mbb_user_unref(task->user);

	g_mutex_free(task->mutex);
	g_cond_free(task->cond);
	g_free(task);
}
Beispiel #5
0
static struct mbb_task *mbb_task_new(GQuark name, struct mbb_task_hook *hook, gpointer data)
{
	struct mbb_task *task;

	task = g_new(struct mbb_task, 1);
	task->name = name;
	time(&task->start);
	task->cancel = FALSE;
	task->run = TRUE;

	task->sid = mbb_thread_get_tid();
	if (task->sid >= 0)
		task->user = mbb_user_ref(mbb_thread_get_user());
	else {
		task->sid = mbb_task_get_tid();
		task->user = mbb_user_ref(mbb_task_get_user());
	}

	task->hook = hook;
	task->data = data;

	task->mutex = g_mutex_new();
	task->cond = g_cond_new();

	task->mod = mbb_module_last_used();
	mbb_module_use(task->mod);

	mbb_plock_writer_lock();

	if (ht == NULL)
		ht = g_hash_table_new(g_direct_hash, g_direct_equal);
	task->id = task_id++;
	g_hash_table_insert(ht, GINT_TO_POINTER(task->id), task);

	mbb_plock_writer_unlock();

	return task;
}
Beispiel #6
0
void mbb_session_add_var(struct mbb_var *var)
{
	mbb_plock_writer_lock();
	g_queue_push_tail(&var_queue, var);
	mbb_plock_writer_unlock();
}