Fix memory and resource leaks in failing resource provider open callbacks
When an mjpResourceProvider's open callback returns 0 (failure), MuJoCo does not invoke the corresponding close callback. Previously, several resource provider implementations allocated heap memory or system file handles before encountering an error, failing to clean them up before returning 0. This change addresses these leaks across the codebase and clarifies the API contract. PiperOrigin-RevId: 929803942 Change-Id: Ib7344033726895cdf037a8d9356ffc183c78c2d3
This commit is contained in:
committed by
Copybara-Service
parent
c31e94cee6
commit
edbe6a6f74
@@ -79,6 +79,10 @@ class Viewer {
|
||||
resource_provider.open = [](mjResource* resource) {
|
||||
auto* data = new ResourceData();
|
||||
data->bytes = LoadAsset(resource->name);
|
||||
if (data->bytes.empty()) {
|
||||
delete data;
|
||||
return 0;
|
||||
}
|
||||
resource->data = data;
|
||||
return static_cast<int>(data->bytes.size());
|
||||
};
|
||||
@@ -135,9 +139,7 @@ class Viewer {
|
||||
bytes_per_pixel);
|
||||
}
|
||||
|
||||
std::string GetDropFile() {
|
||||
return window_->GetDropFile();
|
||||
}
|
||||
std::string GetDropFile() { return window_->GetDropFile(); }
|
||||
|
||||
void Present(const mujoco::python::MjModelWrapper& model,
|
||||
mujoco::python::MjDataWrapper& data,
|
||||
|
||||
Reference in New Issue
Block a user