Back to all reviewers

Enforce clear data ownership

maplibre/maplibre-native
Based on 4 comments
C++

Always establish and maintain clear ownership semantics in concurrent code to prevent data races. This includes: 1. Use RAII patterns for resource management (especially locks)

Concurrency C++

Reviewer Prompt

Always establish and maintain clear ownership semantics in concurrent code to prevent data races. This includes:

  1. Use RAII patterns for resource management (especially locks)
  2. Ensure data lifetime matches synchronization scope
  3. Prefer value semantics over references for shared data
  4. Be explicit about ownership transfer in async operations

Example of proper RAII lock usage:

void DynamicTexture::reserveSize(const Size& size, int32_t uniqueId) {
    std::lock_guard<std::mutex> guard(mutex); // RAII lock
    // ... protected operations ...
} // Auto-unlock on scope exit

// Instead of:
void DynamicTexture::reserveSize(const Size& size, int32_t uniqueId) {
    mutex.lock();
    // ... operations that might throw ...
    mutex.unlock(); // Might never be reached!
}

For shared data access:

// Avoid:
std::string_view getData() {
    std::shared_lock<std::shared_mutex> lock(mutex);
    return string_view{buffer.data()}; // Dangerous! View might outlive lock
}

// Prefer:
std::string getData() {
    std::shared_lock<std::shared_mutex> lock(mutex);
    return std::string{buffer}; // Safe copy
}
4
Comments Analyzed
C++
Primary Language
Concurrency
Category

Source Discussions