Avoid recursive standby retries on allocation failure

This commit is contained in:
evgeny committed 2026-10-26 18:27:27 +01:00
1 parent f92077e601
commit d532fe062e
2 files changed
+12 -8

No files matched your search

+8 -1
View File
@@ -944,13 +944,20 @@ static void db_sync_resume_peer_check(struct DB_SYNC* db) {
db->peer_check_timer = uasync_set_timeout(db->inst->ua, DB_SYNC_PEER_CHECK_INTERVAL * 10000ULL, db, db_sync_peer_check_cb, "history_retry");
if (!db->peer_check_timer) DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "history retry timer allocation");
}
#ifdef UTUN_HAVE_STANDBY
/* standby_wait может вызвать callback синхронно при отказе памяти: освобождаем handle и ставим таймер без рекурсии. */
static void db_sync_peer_check_wake(void* arg) {
struct DB_SYNC* db = arg; db->peer_check_wait = NULL;
db_sync_resume_peer_check(db);
}
#endif
static void db_sync_peer_check_cb(void* arg) {
struct DB_SYNC* db = arg; db->peer_check_timer = NULL; int pending = 0;
if (!db->enabled) return;
#ifdef UTUN_HAVE_STANDBY
db->peer_check_wait = NULL;
if (standby_get_sleep_tb() > 0) {
db->peer_check_wait = standby_wait(db, db_sync_peer_check_cb);
db->peer_check_wait = standby_wait(db, db_sync_peer_check_wake);
if (!db->peer_check_wait) {
DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "history standby wait allocation; retry later");
db_sync_resume_peer_check(db);