Avoid recursive standby retries on allocation failure
This commit is contained in:
1 parent
f92077e601
commit
d532fe062e
2 files changed
+12
-8
No files matched your search
+8
-1
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user