Browse Source

[Minor] Added callback helpers

tags/1.8.0
Mikhail Galanin 5 years ago
parent
commit
55afdd2905
3 changed files with 50 additions and 11 deletions
  1. 2
    4
      src/lua/lua_common.h
  2. 22
    5
      src/lua/lua_thread_pool.c
  3. 26
    2
      src/lua/lua_thread_pool.h

+ 2
- 4
src/lua/lua_common.h View File

@@ -419,16 +419,14 @@ gint
lua_yield_thread (struct thread_entry *thread_entry, gint nresults);

/**
*
* @param pool
* Resumes suspended by lua_yield_thread () thread
* @param task
* @param thread_entry
* @param narg
* @return
*/
void
lua_resume_thread (struct rspamd_task *task, struct thread_entry *thread_entry, gint narg);


/* Paths defs */
#define RSPAMD_CONFDIR_INDEX "CONFDIR"
#define RSPAMD_RUNDIR_INDEX "RUNDIR"

+ 22
- 5
src/lua/lua_thread_pool.c View File

@@ -61,7 +61,7 @@ lua_thread_pool_free (struct lua_thread_pool *pool)
}

struct thread_entry *
lua_thread_pool_get(struct lua_thread_pool *pool)
lua_thread_pool_get (struct lua_thread_pool *pool)
{
gpointer cur;
struct thread_entry *ent = NULL;
@@ -81,7 +81,7 @@ lua_thread_pool_get(struct lua_thread_pool *pool)
}

void
lua_thread_pool_return(struct lua_thread_pool *pool, struct thread_entry *thread_entry)
lua_thread_pool_return (struct lua_thread_pool *pool, struct thread_entry *thread_entry)
{
g_assert (lua_status (thread_entry->lua_state) == 0); /* we can't return a running/yielded thread into the pool */

@@ -99,7 +99,7 @@ lua_thread_pool_return(struct lua_thread_pool *pool, struct thread_entry *thread
}

void
lua_thread_pool_terminate_entry(struct lua_thread_pool *pool, struct thread_entry *thread_entry)
lua_thread_pool_terminate_entry (struct lua_thread_pool *pool, struct thread_entry *thread_entry)
{
struct thread_entry *ent = NULL;

@@ -119,13 +119,30 @@ lua_thread_pool_terminate_entry(struct lua_thread_pool *pool, struct thread_entr
}

struct thread_entry *
lua_thread_pool_get_running_entry(struct lua_thread_pool *pool)
lua_thread_pool_get_running_entry (struct lua_thread_pool *pool)
{
return pool->running_entry;
}

void
lua_thread_pool_set_running_entry(struct lua_thread_pool *pool, struct thread_entry *thread_entry)
lua_thread_pool_set_running_entry (struct lua_thread_pool *pool, struct thread_entry *thread_entry)
{
pool->running_entry = thread_entry;
}


void
lua_thread_pool_prepare_callback (struct lua_thread_pool *pool, struct lua_callback_state *cbs)
{
cbs->thread_pool = pool;
cbs->previous_thread = lua_thread_pool_get_running_entry (pool);
cbs->my_thread = lua_thread_pool_get (pool);
cbs->L = cbs->my_thread->lua_state;
}

void
lua_thread_pool_restore_callback (struct lua_callback_state *cbs)
{
lua_thread_pool_return (cbs->thread_pool, cbs->my_thread);
lua_thread_pool_set_running_entry (cbs->thread_pool, cbs->previous_thread);
}

+ 26
- 2
src/lua/lua_thread_pool.h View File

@@ -11,6 +11,13 @@ struct thread_entry {

struct thread_pool;

struct lua_callback_state {
lua_State *L;
struct thread_entry *my_thread;
struct thread_entry *previous_thread;
struct lua_thread_pool *thread_pool;
};

/**
* Allocates new thread pool on state L. Pre-creates number of lua-threads to use later on
*
@@ -67,7 +74,7 @@ lua_thread_pool_terminate_entry(struct lua_thread_pool *pool, struct thread_entr
* @return
*/
struct thread_entry *
lua_thread_pool_get_running_entry(struct lua_thread_pool *pool);
lua_thread_pool_get_running_entry (struct lua_thread_pool *pool);

/**
* Updates currently running thread
@@ -76,7 +83,24 @@ lua_thread_pool_get_running_entry(struct lua_thread_pool *pool);
* @param thread_entry
*/
void
lua_thread_pool_set_running_entry(struct lua_thread_pool *pool, struct thread_entry *thread_entry);
lua_thread_pool_set_running_entry (struct lua_thread_pool *pool, struct thread_entry *thread_entry);

/**
* Prevents yielded thread to be used for callback execution. lua_thread_pool_restore_callback() should be called afterwards.
*
* @param pool
* @param cbs
*/
void
lua_thread_pool_prepare_callback (struct lua_thread_pool *pool, struct lua_callback_state *cbs);

/**
* Restores state after lua_thread_pool_prepare_callback () usage
*
* @param cbs
*/
void
lua_thread_pool_restore_callback (struct lua_callback_state *cbs);

#endif /* LUA_THREAD_POOL_H_ */


Loading…
Cancel
Save