From 964cab46153923dd43c77ab42438af8fd36f4846 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Sat, 10 Aug 2019 17:55:27 -0400 Subject: [PATCH] media: Set B_CLONEABLE_AREA where applicable. Cloning cloned buffers seems especially strange, but apparently it is actually done. The buffer management code really needs to be cleaned up... --- src/kits/media/BufferGroup.cpp | 2 +- src/kits/media/MediaRoster.cpp | 2 +- src/kits/media/SharedBufferList.cpp | 3 ++- src/kits/media/TimeSource.cpp | 2 +- src/servers/media/BufferManager.cpp | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/kits/media/BufferGroup.cpp b/src/kits/media/BufferGroup.cpp index 552029262b..9ccc913c80 100644 --- a/src/kits/media/BufferGroup.cpp +++ b/src/kits/media/BufferGroup.cpp @@ -69,7 +69,7 @@ BBufferGroup::BBufferGroup(size_t size, int32 count, uint32 placement, void* startAddress; area_id bufferArea = create_area("some buffers area", &startAddress, - placement, areaSize, lock, B_READ_AREA | B_WRITE_AREA); + placement, areaSize, lock, B_READ_AREA | B_WRITE_AREA | B_CLONEABLE_AREA); if (bufferArea < 0) { ERROR("BBufferGroup: failed to allocate %ld bytes area\n", areaSize); fInitError = (status_t)bufferArea; diff --git a/src/kits/media/MediaRoster.cpp b/src/kits/media/MediaRoster.cpp index 9baae950d2..a7fdac23a3 100644 --- a/src/kits/media/MediaRoster.cpp +++ b/src/kits/media/MediaRoster.cpp @@ -2420,7 +2420,7 @@ BMediaRoster::GetParameterWebFor(const media_node& node, BParameterWeb** _web) area_id area; void *data; area = create_area("parameter web data", &data, B_ANY_ADDRESS, size, - B_NO_LOCK, B_READ_AREA | B_WRITE_AREA); + B_NO_LOCK, B_READ_AREA | B_WRITE_AREA | B_CLONEABLE_AREA); if (area < B_OK) { ERROR("BMediaRoster::GetParameterWebFor couldn't create area of " "size %" B_PRId32 "\n", size); diff --git a/src/kits/media/SharedBufferList.cpp b/src/kits/media/SharedBufferList.cpp index 403c708b99..fed865bbc5 100644 --- a/src/kits/media/SharedBufferList.cpp +++ b/src/kits/media/SharedBufferList.cpp @@ -44,7 +44,8 @@ SharedBufferList::Create(SharedBufferList** _list) SharedBufferList* list; area_id area = create_area("shared buffer list", (void**)&list, - B_ANY_ADDRESS, size, B_LAZY_LOCK, B_READ_AREA | B_WRITE_AREA); + B_ANY_ADDRESS, size, B_LAZY_LOCK, + B_READ_AREA | B_WRITE_AREA | B_CLONEABLE_AREA); if (area < 0) return area; diff --git a/src/kits/media/TimeSource.cpp b/src/kits/media/TimeSource.cpp index b692ff5671..e1535d4995 100644 --- a/src/kits/media/TimeSource.cpp +++ b/src/kits/media/TimeSource.cpp @@ -495,7 +495,7 @@ BTimeSource::FinishCreate() (const_cast(&fBuf)); fArea = create_area(name, buf, B_ANY_ADDRESS, TS_AREA_SIZE, - B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA | B_CLONEABLE_AREA); if (fArea <= 0) { ERROR("BTimeSource::BTimeSource couldn't create area, node %" B_PRId32 diff --git a/src/servers/media/BufferManager.cpp b/src/servers/media/BufferManager.cpp index 3341aabff7..2b49e60090 100644 --- a/src/servers/media/BufferManager.cpp +++ b/src/servers/media/BufferManager.cpp @@ -208,7 +208,7 @@ BufferManager::_CloneArea(area_id area) void* address; area_id clonedArea = clone_area("media_server cloned buffer", &address, - B_ANY_ADDRESS, B_READ_AREA | B_WRITE_AREA, area); + B_ANY_ADDRESS, B_READ_AREA | B_WRITE_AREA | B_CLONEABLE_AREA, area); TRACE("BufferManager::_CloneArea() cloned area %" B_PRId32 ", clone id %" B_PRId32 "\n", area, clonedArea);