#ifndef HYPERDRM_RETRY_H #define HYPERDRM_RETRY_H #include #include #include #define RETRY_DELAY_MS 5000 /* Continuous autostart retries and bounded manual source recovery. */ typedef struct {uint64_t due;unsigned attempts;bool automatic,paused,blocked;} RetryState; static void retry_reset(RetryState *state){*state=(RetryState){0};} static void retry_pause(RetryState *state){retry_reset(state);state->paused=true;} static void retry_update(RetryState *state,bool enabled,bool running,uint64_t now){ bool previous=state->automatic; state->automatic=enabled && !state->paused && !state->blocked; if(previous && !state->automatic){state->due=0;state->attempts=0;} if(state->automatic && !running && !state->due)state->due=now+RETRY_DELAY_MS; } static bool retry_take(RetryState *state,uint64_t now){ if(!state->due || nowdue || state->paused || state->blocked)return false; state->due=0;if(state->attemptsattempts++;return true; } static void retry_failure(RetryState *state,uint64_t now){ if(!state->paused && !state->blocked && (state->automatic || state->attempts<6))state->due=now+RETRY_DELAY_MS; } #endif