mirror of
https://github.com/schoebel/mars
synced 2025-02-27 10:00:52 +00:00
server: new thread naming conventions
This commit is contained in:
parent
6d4ba66d55
commit
37da08d6a4
@ -45,6 +45,8 @@
|
|||||||
struct server_cookie {
|
struct server_cookie {
|
||||||
struct mars_socket server_socket;
|
struct mars_socket server_socket;
|
||||||
struct mars_tcp_params *server_params;
|
struct mars_tcp_params *server_params;
|
||||||
|
int port_nr;
|
||||||
|
int thread_nr;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct server_cookie server_cookie[MARS_TRAFFIC_MAX] = {
|
static struct server_cookie server_cookie[MARS_TRAFFIC_MAX] = {
|
||||||
@ -365,6 +367,7 @@ int handler_thread(void *data)
|
|||||||
struct mars_global *handler_global = alloc_mars_global();
|
struct mars_global *handler_global = alloc_mars_global();
|
||||||
struct task_struct *thread = NULL;
|
struct task_struct *thread = NULL;
|
||||||
struct server_brick *brick = data;
|
struct server_brick *brick = data;
|
||||||
|
char *cb_name;
|
||||||
struct mars_socket *sock = &brick->handler_socket;
|
struct mars_socket *sock = &brick->handler_socket;
|
||||||
bool ok = mars_get_socket(sock);
|
bool ok = mars_get_socket(sock);
|
||||||
unsigned long statist_jiffies = jiffies;
|
unsigned long statist_jiffies = jiffies;
|
||||||
@ -375,8 +378,14 @@ int handler_thread(void *data)
|
|||||||
MARS_DBG("#%d --------------- handler_thread starting on socket %p\n", sock->s_debug_nr, sock);
|
MARS_DBG("#%d --------------- handler_thread starting on socket %p\n", sock->s_debug_nr, sock);
|
||||||
if (!ok)
|
if (!ok)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
thread = brick_thread_create(cb_thread, brick, "mars_cb%d", brick->version);
|
cb_name = brick_strdup(brick->brick_path);
|
||||||
|
/* naming convention: mars_c instead of mars_h */
|
||||||
|
cb_name[5] = 'c';
|
||||||
|
thread = brick_thread_create(cb_thread,
|
||||||
|
brick,
|
||||||
|
cb_name);
|
||||||
|
brick_string_free(cb_name);
|
||||||
if (unlikely(!thread)) {
|
if (unlikely(!thread)) {
|
||||||
MARS_ERR("cannot create cb thread\n");
|
MARS_ERR("cannot create cb thread\n");
|
||||||
status = -ENOENT;
|
status = -ENOENT;
|
||||||
@ -640,7 +649,6 @@ static int server_switch(struct server_brick *brick)
|
|||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
if (brick->power.button) {
|
if (brick->power.button) {
|
||||||
static int version = 0;
|
|
||||||
bool ok;
|
bool ok;
|
||||||
|
|
||||||
if (brick->power.led_on)
|
if (brick->power.led_on)
|
||||||
@ -654,8 +662,10 @@ static int server_switch(struct server_brick *brick)
|
|||||||
|
|
||||||
mars_power_led_off((void*)brick, false);
|
mars_power_led_off((void*)brick, false);
|
||||||
|
|
||||||
brick->version = version++;
|
brick->handler_thread =
|
||||||
brick->handler_thread = brick_thread_create(handler_thread, brick, "mars_handler%d", brick->version);
|
brick_thread_create(handler_thread,
|
||||||
|
brick,
|
||||||
|
brick->brick_path);
|
||||||
if (unlikely(!brick->handler_thread)) {
|
if (unlikely(!brick->handler_thread)) {
|
||||||
MARS_ERR("cannot create handler thread\n");
|
MARS_ERR("cannot create handler thread\n");
|
||||||
status = -ENOENT;
|
status = -ENOENT;
|
||||||
@ -819,7 +829,7 @@ EXPORT_SYMBOL_GPL(server_brick_type);
|
|||||||
int server_show_statist = 0;
|
int server_show_statist = 0;
|
||||||
EXPORT_SYMBOL_GPL(server_show_statist);
|
EXPORT_SYMBOL_GPL(server_show_statist);
|
||||||
|
|
||||||
static int _server_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();
|
||||||
struct server_cookie *cookie = data;
|
struct server_cookie *cookie = data;
|
||||||
@ -828,7 +838,8 @@ static int _server_thread(void *data)
|
|||||||
char *id = my_id();
|
char *id = my_id();
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
MARS_INF("-------- server starting on host '%s' ----------\n", id);
|
MARS_INF("-------- port %d thread starting on host '%s' ----------\n",
|
||||||
|
cookie->port_nr, id);
|
||||||
|
|
||||||
while (!brick_thread_should_stop() &&
|
while (!brick_thread_should_stop() &&
|
||||||
(!mars_global || !mars_global->global_power.button)) {
|
(!mars_global || !mars_global->global_power.button)) {
|
||||||
@ -836,10 +847,13 @@ static int _server_thread(void *data)
|
|||||||
brick_msleep(5000);
|
brick_msleep(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
MARS_INF("-------- server now working on host '%s' ----------\n", id);
|
MARS_INF("-------- port %d thread now working on host '%s' ----------\n",
|
||||||
|
cookie->port_nr, id);
|
||||||
|
|
||||||
while (!brick_thread_should_stop() || !list_empty(&server_global->brick_anchor)) {
|
while (!brick_thread_should_stop() ||
|
||||||
|
!list_empty(&server_global->brick_anchor)) {
|
||||||
struct server_brick *brick = NULL;
|
struct server_brick *brick = NULL;
|
||||||
|
const char *ini_path;
|
||||||
struct mars_socket handler_socket = {};
|
struct mars_socket handler_socket = {};
|
||||||
|
|
||||||
change_sem(&handler_limit_sem, &handler_limit, &handler_nr);
|
change_sem(&handler_limit_sem, &handler_limit, &handler_nr);
|
||||||
@ -863,26 +877,32 @@ static int _server_thread(void *data)
|
|||||||
status = mars_accept_socket(&handler_socket,
|
status = mars_accept_socket(&handler_socket,
|
||||||
my_socket,
|
my_socket,
|
||||||
my_params);
|
my_params);
|
||||||
if (unlikely(status < 0 || !mars_socket_is_alive(&handler_socket))) {
|
if (unlikely(status < 0 ||
|
||||||
|
!mars_socket_is_alive(&handler_socket))) {
|
||||||
brick_msleep(500);
|
brick_msleep(500);
|
||||||
if (status == -EAGAIN)
|
if (status == -EAGAIN)
|
||||||
continue; // without error message
|
continue; // without error message
|
||||||
MARS_WRN("accept status = %d\n", status);
|
MARS_WRN("accept status = %d\n", status);
|
||||||
brick_msleep(1000);
|
brick_msleep(100);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
handler_socket.s_shutdown_on_err = true;
|
handler_socket.s_shutdown_on_err = true;
|
||||||
|
|
||||||
MARS_DBG("got new connection #%d\n", handler_socket.s_debug_nr);
|
MARS_DBG("got new connection #%d\n", handler_socket.s_debug_nr);
|
||||||
|
|
||||||
|
ini_path = path_make("mars_h:%d.%d",
|
||||||
|
cookie->port_nr,
|
||||||
|
++cookie->thread_nr);
|
||||||
brick = (void*)mars_make_brick(server_global, NULL,
|
brick = (void*)mars_make_brick(server_global, NULL,
|
||||||
&server_brick_type,
|
&server_brick_type,
|
||||||
"handler", "handler");
|
"(none)",
|
||||||
|
ini_path);
|
||||||
|
brick_string_free(ini_path);
|
||||||
if (!brick) {
|
if (!brick) {
|
||||||
MARS_ERR("cannot create server instance\n");
|
MARS_ERR("cannot create server instance\n");
|
||||||
mars_shutdown_socket(&handler_socket);
|
mars_shutdown_socket(&handler_socket);
|
||||||
mars_put_socket(&handler_socket);
|
mars_put_socket(&handler_socket);
|
||||||
brick_msleep(2000);
|
brick_msleep(500);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
memcpy(&brick->handler_socket, &handler_socket, sizeof(struct mars_socket));
|
memcpy(&brick->handler_socket, &handler_socket, sizeof(struct mars_socket));
|
||||||
@ -929,7 +949,8 @@ static int _server_thread(void *data)
|
|||||||
|
|
||||||
//cleanup_mm();
|
//cleanup_mm();
|
||||||
|
|
||||||
MARS_INF("-------- done status = %d ----------\n", status);
|
MARS_INF("-------- port %d thread done status = %d ----------\n",
|
||||||
|
cookie->port_nr, status);
|
||||||
brick_mem_free(server_global);
|
brick_mem_free(server_global);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -967,9 +988,11 @@ int __init init_mars_server(void)
|
|||||||
for (i = 0; i < MARS_TRAFFIC_MAX; i++) {
|
for (i = 0; i < MARS_TRAFFIC_MAX; i++) {
|
||||||
struct sockaddr_storage sockaddr = {};
|
struct sockaddr_storage sockaddr = {};
|
||||||
char tmp[16];
|
char tmp[16];
|
||||||
|
int port_nr = mars_net_default_port + i;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
sprintf(tmp, ":%d", mars_net_default_port + i);
|
server_cookie[i].port_nr = port_nr;
|
||||||
|
sprintf(tmp, ":%d", port_nr);
|
||||||
status = mars_create_sockaddr(&sockaddr, tmp);
|
status = mars_create_sockaddr(&sockaddr, tmp);
|
||||||
if (unlikely(status < 0)) {
|
if (unlikely(status < 0)) {
|
||||||
exit_mars_server();
|
exit_mars_server();
|
||||||
@ -981,14 +1004,16 @@ int __init init_mars_server(void)
|
|||||||
server_cookie[i].server_params,
|
server_cookie[i].server_params,
|
||||||
true);
|
true);
|
||||||
if (unlikely(status < 0)) {
|
if (unlikely(status < 0)) {
|
||||||
MARS_ERR("could not create server socket %d, status = %d\n", i, status);
|
MARS_ERR("could not create server socket port=%d, status = %d\n",
|
||||||
|
port_nr, status);
|
||||||
exit_mars_server();
|
exit_mars_server();
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
server_thread[i] = brick_thread_create(_server_thread,
|
server_thread[i] = brick_thread_create(port_thread,
|
||||||
&server_cookie[i],
|
&server_cookie[i],
|
||||||
"mars_server_%d", i);
|
"mars_port:%d",
|
||||||
|
port_nr);
|
||||||
if (unlikely(!server_thread[i] || IS_ERR(server_thread[i]))) {
|
if (unlikely(!server_thread[i] || IS_ERR(server_thread[i]))) {
|
||||||
MARS_ERR("could not create server thread %d\n", i);
|
MARS_ERR("could not create server thread %d\n", i);
|
||||||
exit_mars_server();
|
exit_mars_server();
|
||||||
|
@ -65,7 +65,6 @@ struct server_brick {
|
|||||||
struct list_head cb_read_list;
|
struct list_head cb_read_list;
|
||||||
struct list_head cb_write_list;
|
struct list_head cb_write_list;
|
||||||
atomic_t in_flight;
|
atomic_t in_flight;
|
||||||
int version;
|
|
||||||
bool cb_running;
|
bool cb_running;
|
||||||
bool handler_running;
|
bool handler_running;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user