forked from cory/tildefriends
ssb: Shutdown fixes.
This commit is contained in:
parent
a08bba438e
commit
71444b0427
12
metadata/en-US/changelogs/30.txt
Normal file
12
metadata/en-US/changelogs/30.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
* Improve, test, and fix some first time flow issues.
|
||||||
|
* Show reasons for failing to connect.
|
||||||
|
* Actually use CommonMark JS in "safe" mode(!).
|
||||||
|
* Move app blob handling from JS to C.
|
||||||
|
* Fixed "publish" command-line interface and used it to add a script that posts development activity updates.
|
||||||
|
* Minor style improvements.
|
||||||
|
* Make it possible to see the little graphs on mobile.
|
||||||
|
* Updated dependencies:
|
||||||
|
* libbacktrace
|
||||||
|
* CodeMirror
|
||||||
|
* c-ares 1.34.3
|
||||||
|
* speedscope 1.21.0
|
20
src/ssb.c
20
src/ssb.c
@ -220,6 +220,7 @@ typedef struct _tf_ssb_t
|
|||||||
bool verbose;
|
bool verbose;
|
||||||
bool store_debug_messages;
|
bool store_debug_messages;
|
||||||
bool shutting_down;
|
bool shutting_down;
|
||||||
|
bool shutting_down_deferred;
|
||||||
|
|
||||||
int messages_stored;
|
int messages_stored;
|
||||||
int blobs_stored;
|
int blobs_stored;
|
||||||
@ -2009,7 +2010,7 @@ static void _tf_ssb_connection_destroy(tf_ssb_connection_t* connection, const ch
|
|||||||
connection->debug_messages[i] = NULL;
|
connection->debug_messages[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (--connection->ssb->connection_ref_count == 0 && connection->ssb->shutting_down)
|
if (--connection->ssb->connection_ref_count == 0 && connection->ssb->shutting_down_deferred)
|
||||||
{
|
{
|
||||||
tf_ssb_destroy(connection->ssb);
|
tf_ssb_destroy(connection->ssb);
|
||||||
}
|
}
|
||||||
@ -2516,12 +2517,6 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
|||||||
tf_printf("tf_ssb_destroy\n");
|
tf_printf("tf_ssb_destroy\n");
|
||||||
ssb->shutting_down = true;
|
ssb->shutting_down = true;
|
||||||
|
|
||||||
if (ssb->connections_tracker)
|
|
||||||
{
|
|
||||||
tf_ssb_connections_destroy(ssb->connections_tracker);
|
|
||||||
ssb->connections_tracker = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ssb->broadcast_listener.data && !uv_is_closing((uv_handle_t*)&ssb->broadcast_listener))
|
if (ssb->broadcast_listener.data && !uv_is_closing((uv_handle_t*)&ssb->broadcast_listener))
|
||||||
{
|
{
|
||||||
uv_close((uv_handle_t*)&ssb->broadcast_listener, _tf_ssb_on_handle_close);
|
uv_close((uv_handle_t*)&ssb->broadcast_listener, _tf_ssb_on_handle_close);
|
||||||
@ -2637,10 +2632,20 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
|||||||
tf_ssb_connection_close(connection);
|
tf_ssb_connection_close(connection);
|
||||||
connection = next;
|
connection = next;
|
||||||
}
|
}
|
||||||
|
uv_run(ssb->loop, UV_RUN_NOWAIT);
|
||||||
tf_printf("Closed.\n");
|
tf_printf("Closed.\n");
|
||||||
|
|
||||||
|
if (ssb->connections_tracker)
|
||||||
|
{
|
||||||
|
tf_ssb_connections_destroy(ssb->connections_tracker);
|
||||||
|
ssb->connections_tracker = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
uv_run(ssb->loop, UV_RUN_NOWAIT);
|
||||||
|
|
||||||
if (ssb->loop == &ssb->own_loop)
|
if (ssb->loop == &ssb->own_loop)
|
||||||
{
|
{
|
||||||
|
tf_printf("uv_loop_close\n");
|
||||||
int r = uv_loop_close(ssb->loop);
|
int r = uv_loop_close(ssb->loop);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
@ -2695,6 +2700,7 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
|||||||
ssb->room_name = NULL;
|
ssb->room_name = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssb->shutting_down_deferred = true;
|
||||||
if (ssb->connection_ref_count == 0)
|
if (ssb->connection_ref_count == 0)
|
||||||
{
|
{
|
||||||
uv_mutex_destroy(&ssb->db_readers_lock);
|
uv_mutex_destroy(&ssb->db_readers_lock);
|
||||||
|
@ -112,6 +112,10 @@ static void _tf_ssb_connections_get_next_after_work(tf_ssb_t* ssb, int status, v
|
|||||||
static void _tf_ssb_connections_timer(uv_timer_t* timer)
|
static void _tf_ssb_connections_timer(uv_timer_t* timer)
|
||||||
{
|
{
|
||||||
tf_ssb_connections_t* connections = timer->data;
|
tf_ssb_connections_t* connections = timer->data;
|
||||||
|
if (tf_ssb_is_shutting_down(connections->ssb))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
tf_ssb_connection_t* active[4];
|
tf_ssb_connection_t* active[4];
|
||||||
int count = tf_ssb_get_connections(connections->ssb, active, tf_countof(active));
|
int count = tf_ssb_get_connections(connections->ssb, active, tf_countof(active));
|
||||||
if (count < tf_countof(active))
|
if (count < tf_countof(active))
|
||||||
|
Loading…
Reference in New Issue
Block a user