Compare commits

...

3 Commits

Author SHA1 Message Date
9614d03bef ssb: Fix a timer leak I observed trying to wrap up 0.0.24.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 17m17s
2024-10-30 19:32:24 -04:00
32a335c676 test: Retry harder. 2024-10-30 19:32:05 -04:00
06e27fc1e0 docs: Update the 0.0.24 changelog. 2024-10-30 19:31:33 -04:00
4 changed files with 46 additions and 31 deletions

View File

@ -1,18 +0,0 @@
* Command-line publishing of SSB messages.
* Minor SSB replication improvements.
* Disallow rich text paste on more browsers.
* The identity app lets you change the server account.
* Fix SSB profile icons stretching.
* Fixed the iPhone app missing data.
* Added a button to initiate sync.
* Fixed the AppImage.
* Android version compatibility fixes.
* Updates:
* CodeMirror
* CommonMark 0.31.2
* Lit 3.2.1
* OpenSSL 3.4.0
* c-ares 1.34.2
* libbacktrace
* libuv 1.49.2
* sqlite 3.47.0

View File

@ -0,0 +1,19 @@
* Command-line publishing.
* SSB replication improvements.
* Disallow rich text paste more.
* identity app lets you change the server account.
* SSB profile icons stretching.
* Fixed iPhone app missing data.
* Added an initiate sync button.
* Fixed the AppImage.
* Flatpak WIP.
* Android compatibility fixes.
* Updates:
* CodeMirror
* CommonMark 0.31.2
* Lit 3.2.1
* OpenSSL 3.4.0
* c-ares 1.34.2
* libbacktrace
* libuv 1.49.2
* sqlite 3.47.0

View File

@ -2450,6 +2450,20 @@ static void _tf_ssb_on_handle_close(uv_handle_t* handle)
static void _tf_ssb_on_timer_close(uv_handle_t* handle) static void _tf_ssb_on_timer_close(uv_handle_t* handle)
{ {
tf_ssb_timer_t* timer = handle->data;
for (int i = 0; i < timer->ssb->timers_count; i++)
{
if (timer->ssb->timers[i] == timer)
{
timer->ssb->timers[i] = timer->ssb->timers[--timer->ssb->timers_count];
break;
}
}
if (timer->ssb->shutting_down && !timer->ssb->timers_count)
{
tf_free(timer->ssb->timers);
timer->ssb->timers = NULL;
}
tf_free(handle->data); tf_free(handle->data);
} }
@ -2503,14 +2517,11 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
{ {
uv_close((uv_handle_t*)&ssb->timers[i]->timer, _tf_ssb_on_timer_close); uv_close((uv_handle_t*)&ssb->timers[i]->timer, _tf_ssb_on_timer_close);
} }
ssb->timers_count = 0;
tf_free(ssb->timers);
ssb->timers = NULL;
tf_printf("Waiting for closes.\n"); tf_printf("Waiting for closes.\n");
while (ssb->broadcast_listener.data || ssb->broadcast_sender.data || ssb->broadcast_timer.data || ssb->broadcast_cleanup_timer.data || ssb->trace_timer.data || while (ssb->broadcast_listener.data || ssb->broadcast_sender.data || ssb->broadcast_timer.data || ssb->broadcast_cleanup_timer.data || ssb->trace_timer.data ||
ssb->server.data || ssb->ref_count || ssb->request_activity_timer.data) ssb->server.data || ssb->ref_count || ssb->request_activity_timer.data || ssb->timers_count)
{ {
uv_run(ssb->loop, UV_RUN_ONCE); uv_run(ssb->loop, UV_RUN_ONCE);
} }
@ -4197,19 +4208,16 @@ static void _tf_ssb_scheduled_timer(uv_timer_t* handle)
{ {
tf_ssb_timer_t* timer = handle->data; tf_ssb_timer_t* timer = handle->data;
timer->callback(timer->ssb, timer->user_data); timer->callback(timer->ssb, timer->user_data);
for (int i = 0; i < timer->ssb->timers_count; i++)
{
if (timer->ssb->timers[i] == timer)
{
timer->ssb->timers[i] = timer->ssb->timers[--timer->ssb->timers_count];
break;
}
}
uv_close((uv_handle_t*)handle, _tf_ssb_on_timer_close); uv_close((uv_handle_t*)handle, _tf_ssb_on_timer_close);
} }
void tf_ssb_schedule_work(tf_ssb_t* ssb, int delay_ms, void (*callback)(tf_ssb_t* ssb, void* user_data), void* user_data) void tf_ssb_schedule_work(tf_ssb_t* ssb, int delay_ms, void (*callback)(tf_ssb_t* ssb, void* user_data), void* user_data)
{ {
if (ssb->shutting_down)
{
return;
}
ssb->timers = tf_resize_vec(ssb->timers, sizeof(uv_timer_t*) * (ssb->timers_count + 1)); ssb->timers = tf_resize_vec(ssb->timers, sizeof(uv_timer_t*) * (ssb->timers_count + 1));
tf_ssb_timer_t* timer = tf_malloc(sizeof(tf_ssb_timer_t)); tf_ssb_timer_t* timer = tf_malloc(sizeof(tf_ssb_timer_t));
*timer = (tf_ssb_timer_t) *timer = (tf_ssb_timer_t)

View File

@ -205,7 +205,13 @@ try:
wait.until(expected_conditions.presence_of_element_located((By.ID, 'content'))) wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))) driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root # NoSuchShadowRootException
while True:
try:
tf_app = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
break
except:
pass
driver.switch_to.default_content() driver.switch_to.default_content()
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click() driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()