- Resolve TODO about using map for server area_id lookup. - Remove server cloned area delete request logic because it is less efficient and robust. Cloned area delete request messages may be missed if client message queue is full so it may cause cloned area leak. - Implement reference counting for cloned areas instead. Change-Id: Ie434ad36c2761ab0df00d341d55a6cea67b69830 Reviewed-on: https://review.haiku-os.org/c/haiku/+/9667 Reviewed-by: waddlesplash <[email protected]> Tested-by: Commit checker robot <[email protected]>
50 lines
851 B
C++
50 lines
851 B
C++
/*
|
|
* Copyright 2006-2011, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Axel Dörfler, [email protected]
|
|
*/
|
|
#ifndef SERVER_MEMORY_ALLOCATOR_H
|
|
#define SERVER_MEMORY_ALLOCATOR_H
|
|
|
|
|
|
#include <map>
|
|
|
|
#include <OS.h>
|
|
|
|
|
|
namespace BPrivate {
|
|
|
|
|
|
struct area_mapping {
|
|
int32 reference_count;
|
|
area_id server_area;
|
|
area_id local_area;
|
|
uint8* local_base;
|
|
};
|
|
|
|
|
|
class ServerMemoryAllocator {
|
|
public:
|
|
ServerMemoryAllocator();
|
|
~ServerMemoryAllocator();
|
|
|
|
status_t InitCheck();
|
|
|
|
status_t AddArea(area_id serverArea, area_id& _localArea,
|
|
uint8*& _base, size_t size,
|
|
bool readOnly = false);
|
|
void RemoveArea(area_id serverArea);
|
|
|
|
private:
|
|
std::map<area_id, area_mapping>
|
|
fAreas;
|
|
};
|
|
|
|
|
|
} // namespace BPrivate
|
|
|
|
|
|
#endif // SERVER_MEMORY_ALLOCATOR_H
|