fix: #38 EVENT_BUFFER 增加 MAX_BUFFER_SIZE=1000 上限
push_reading_event 时超出上限自动丢弃最旧事件,防止未导出事件堆积导致 OOM。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
1a246445fe
commit
fc9e4eec81
@ -4,12 +4,19 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::progress::ReadingPosition;
|
||||
|
||||
/// Maximum number of events before oldest are dropped to prevent unbounded memory growth.
|
||||
const MAX_BUFFER_SIZE: usize = 1000;
|
||||
|
||||
// Global event buffer, protected by a Mutex for thread safety.
|
||||
static EVENT_BUFFER: Mutex<Vec<ReadingEvent>> = Mutex::new(Vec::new());
|
||||
|
||||
/// Push a reading event into the global buffer.
|
||||
/// If the buffer exceeds MAX_BUFFER_SIZE, the oldest event is dropped.
|
||||
pub fn push_reading_event(event: ReadingEvent) {
|
||||
if let Ok(mut buf) = EVENT_BUFFER.lock() {
|
||||
if buf.len() >= MAX_BUFFER_SIZE {
|
||||
buf.remove(0);
|
||||
}
|
||||
buf.push(event);
|
||||
}
|
||||
}
|
||||
@ -45,7 +52,7 @@ fn now_ms() -> i64 {
|
||||
.unwrap_or(0)
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, uniffi::Enum)]
|
||||
#[serde(tag = "type")]
|
||||
pub enum ReadingEvent {
|
||||
MaterialOpened {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user