diff options
Diffstat (limited to 'libqdutils')
-rw-r--r-- | libqdutils/qdMetaData.cpp | 22 | ||||
-rw-r--r-- | libqdutils/qdMetaData.h | 8 |
2 files changed, 30 insertions, 0 deletions
diff --git a/libqdutils/qdMetaData.cpp b/libqdutils/qdMetaData.cpp index 3259ee23..a40ea629 100644 --- a/libqdutils/qdMetaData.cpp +++ b/libqdutils/qdMetaData.cpp @@ -64,6 +64,13 @@ static int validateAndMap(private_handle_t* handle) { return 0; } +static void unmapAndReset(private_handle_t *handle) { + if (private_handle_t::validate(handle) == 0 && handle->base_metadata) { + munmap(reinterpret_cast<void *>(handle->base_metadata), getMetaDataSize()); + handle->base_metadata = 0; + } +} + int setMetaData(private_handle_t *handle, DispParamType paramType, void *param) { auto err = validateAndMap(handle); @@ -346,3 +353,18 @@ int copyMetaDataVaToVa(MetaData_t *src_data, MetaData_t *dst_data) { return 0; } +int setMetaDataAndUnmap(struct private_handle_t *handle, enum DispParamType paramType, + void *param) { + auto ret = setMetaData(handle, paramType, param); + unmapAndReset(handle); + return ret; +} + +int getMetaDataAndUnmap(struct private_handle_t *handle, + enum DispFetchParamType paramType, + void *param) { + auto ret = getMetaData(handle, paramType, param); + unmapAndReset(handle); + return ret; +} + diff --git a/libqdutils/qdMetaData.h b/libqdutils/qdMetaData.h index 195fdd20..5739ceea 100644 --- a/libqdutils/qdMetaData.h +++ b/libqdutils/qdMetaData.h @@ -208,6 +208,14 @@ int clearMetaDataVa(struct MetaData_t *data, enum DispParamType paramType); unsigned long getMetaDataSize(); +// Map, access metadata and unmap. Used by clients that do not import/free but +// clone and delete native_handle +int setMetaDataAndUnmap(struct private_handle_t *handle, enum DispParamType paramType, + void *param); +int getMetaDataAndUnmap(struct private_handle_t *handle, + enum DispFetchParamType paramType, + void *param); + #ifdef __cplusplus } #endif |