mirror of https://github.com/schoebel/mars
server: use thhe new delegate_free
This commit is contained in:
parent
57f9defdf9
commit
c15a3f016d
|
@ -229,10 +229,6 @@ int cb_thread(void *data)
|
||||||
mars_put_socket(sock);
|
mars_put_socket(sock);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
down_write(&server_mutex);
|
|
||||||
list_del_init(&brick->server_head);
|
|
||||||
up_write(&server_mutex);
|
|
||||||
|
|
||||||
MARS_DBG("---------- cb_thread terminating, status = %d\n", status);
|
MARS_DBG("---------- cb_thread terminating, status = %d\n", status);
|
||||||
brick_wake_smp(&brick->startup_event);
|
brick_wake_smp(&brick->startup_event);
|
||||||
atomic_dec(&server_callback_count);
|
atomic_dec(&server_callback_count);
|
||||||
|
@ -457,6 +453,7 @@ int handler_thread(void *data)
|
||||||
status = -ENOENT;
|
status = -ENOENT;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
brick->delegate_free = &brick->delegated_brick;
|
||||||
brick->cb_thread = thread;
|
brick->cb_thread = thread;
|
||||||
|
|
||||||
brick->handler_running = true;
|
brick->handler_running = true;
|
||||||
|
@ -754,10 +751,6 @@ int handler_thread(void *data)
|
||||||
mars_put_socket(sock);
|
mars_put_socket(sock);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
down_write(&server_mutex);
|
|
||||||
list_del_init(&brick->server_head);
|
|
||||||
up_write(&server_mutex);
|
|
||||||
|
|
||||||
MARS_DBG("#%d handler_thread terminating, status = %d\n", sock->s_debug_nr, status);
|
MARS_DBG("#%d handler_thread terminating, status = %d\n", sock->s_debug_nr, status);
|
||||||
|
|
||||||
mars_kill_brick_all(handler_global, &handler_global->brick_anchor, false);
|
mars_kill_brick_all(handler_global, &handler_global->brick_anchor, false);
|
||||||
|
@ -836,6 +829,7 @@ static int server_switch(struct server_brick *brick)
|
||||||
status = -ENOENT;
|
status = -ENOENT;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
brick->delegate_free = &brick->delegated_brick;
|
||||||
|
|
||||||
mars_power_led_on((void*)brick, true);
|
mars_power_led_on((void*)brick, true);
|
||||||
} else if (!brick->power.led_off) {
|
} else if (!brick->power.led_off) {
|
||||||
|
@ -1057,6 +1051,35 @@ int server_show_statist = 0;
|
||||||
EXPORT_SYMBOL_GPL(server_show_statist);
|
EXPORT_SYMBOL_GPL(server_show_statist);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static
|
||||||
|
void check_bricks(void)
|
||||||
|
{
|
||||||
|
struct list_head *tmp;
|
||||||
|
|
||||||
|
down_write(&server_mutex);
|
||||||
|
for (tmp = server_anchor.next; tmp && tmp != &server_anchor; tmp = tmp->next) {
|
||||||
|
struct server_brick *running_brick = container_of(tmp, struct server_brick, server_head);
|
||||||
|
struct mars_socket *handler_socket = &running_brick->handler_socket;
|
||||||
|
|
||||||
|
if (!running_brick->delegated_brick)
|
||||||
|
continue;
|
||||||
|
if (!handler_socket)
|
||||||
|
continue;
|
||||||
|
brick_yield();
|
||||||
|
if (mars_socket_is_alive(handler_socket)) {
|
||||||
|
mars_shutdown_socket(handler_socket);
|
||||||
|
/* only once per round */
|
||||||
|
break;
|
||||||
|
} else if (!running_brick->handler_thread && !running_brick->cb_thread) {
|
||||||
|
list_del_init(&running_brick->server_head);
|
||||||
|
brick_mem_free(running_brick);
|
||||||
|
/* only once per round */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
up_write(&server_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
static int port_thread(void *data)
|
static int port_thread(void *data)
|
||||||
{
|
{
|
||||||
struct mars_global *server_global = alloc_mars_global();
|
struct mars_global *server_global = alloc_mars_global();
|
||||||
|
@ -1090,6 +1113,7 @@ static int port_thread(void *data)
|
||||||
|
|
||||||
smp_mb();
|
smp_mb();
|
||||||
brick_yield();
|
brick_yield();
|
||||||
|
check_bricks();
|
||||||
|
|
||||||
server_global->global_version++;
|
server_global->global_version++;
|
||||||
mars_limit(&server_limiter, 0);
|
mars_limit(&server_limiter, 0);
|
||||||
|
|
|
@ -61,6 +61,7 @@ struct server_brick {
|
||||||
struct mars_brick *conn_brick;
|
struct mars_brick *conn_brick;
|
||||||
struct task_struct *handler_thread;
|
struct task_struct *handler_thread;
|
||||||
struct task_struct *cb_thread;
|
struct task_struct *cb_thread;
|
||||||
|
void *delegated_brick;
|
||||||
wait_queue_head_t startup_event;
|
wait_queue_head_t startup_event;
|
||||||
wait_queue_head_t cb_event;
|
wait_queue_head_t cb_event;
|
||||||
struct mutex cb_mutex;
|
struct mutex cb_mutex;
|
||||||
|
|
Loading…
Reference in New Issue