From 6e226f402b1f30a2c483c4338ebbe4d661bb20a7 Mon Sep 17 00:00:00 2001 From: ImBenji Date: Sun, 23 Nov 2025 05:51:00 +0000 Subject: [PATCH] Add file locking for concurrent access in header.dart --- dart/lib/header.dart | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dart/lib/header.dart b/dart/lib/header.dart index 99f0fd2..57fe656 100644 --- a/dart/lib/header.dart +++ b/dart/lib/header.dart @@ -215,50 +215,64 @@ class SweepstoreWorkerTicket { // Offset 0 - 4 bytes int get identifier { + _concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset, _baseOffset + 4); _concurrencyHeader._header._file.setPositionSync(_baseOffset); int id = _concurrencyHeader._header._file.readIntSync(4); + _concurrencyHeader._header._file.unlockSync(_baseOffset, _baseOffset + 4); return id; } // Offset 4 - 4 bytes int get workerHeartbeat { + _concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 4, _baseOffset + 8); _concurrencyHeader._header._file.setPositionSync(_baseOffset + 4); int heartbeat = _concurrencyHeader._header._file.readIntSync(4); + _concurrencyHeader._header._file.unlockSync(_baseOffset + 4, _baseOffset + 8); return heartbeat; } // Offset 8 - 1 byte SweepstoreTicketState get ticketState { + _concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 8, _baseOffset + 9); _concurrencyHeader._header._file.setPositionSync(_baseOffset + 8); int stateValue = _concurrencyHeader._header._file.readIntSync(1); + _concurrencyHeader._header._file.unlockSync(_baseOffset + 8, _baseOffset + 9); return SweepstoreTicketState.values[stateValue]; } // Offset 9 - 1 byte SweepstoreTicketOperation get ticketOperation { + _concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 9, _baseOffset + 10); _concurrencyHeader._header._file.setPositionSync(_baseOffset + 9); int operationValue = _concurrencyHeader._header._file.readIntSync(1); + _concurrencyHeader._header._file.unlockSync(_baseOffset + 9, _baseOffset + 10); return SweepstoreTicketOperation.values[operationValue]; } // Offset 10 - 8 bytes int get keyHash { + _concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 10, _baseOffset + 18); _concurrencyHeader._header._file.setPositionSync(_baseOffset + 10); int hash = _concurrencyHeader._header._file.readIntSync(8); + _concurrencyHeader._header._file.unlockSync(_baseOffset + 10, _baseOffset + 18); return hash; } // Offset 18 - 8 bytes SweepstorePointer get writePointer { + _concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 18, _baseOffset + 26); _concurrencyHeader._header._file.setPositionSync(_baseOffset + 18); int address = _concurrencyHeader._header._file.readIntSync(8); + _concurrencyHeader._header._file.unlockSync(_baseOffset + 18, _baseOffset + 26); return SweepstorePointer(address); } // Offset 26 - 4 bytes int get writeSize { + _concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 26, _baseOffset + 30); _concurrencyHeader._header._file.setPositionSync(_baseOffset + 26); int size = _concurrencyHeader._header._file.readIntSync(4); + _concurrencyHeader._header._file.unlockSync(_baseOffset + 26, _baseOffset + 30); return size; }