Skip to content

Commit 317fed4

Browse files
schoppmpcopybara-github
authored andcommitted
Use std::mem::drop to release memory early, and only do it where necessary
PiperOrigin-RevId: 848208455
1 parent 4c6e80f commit 317fed4

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

willow/src/api/server_accumulator.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,26 +118,24 @@ impl ServerAccumulator {
118118
}
119119

120120
fn new_from_serialized_config(
121-
mut serialized_aggregation_config: cxx::UniquePtr<cxx::CxxString>,
121+
serialized_aggregation_config: cxx::UniquePtr<cxx::CxxString>,
122122
) -> Result<Self, StatusError> {
123123
let serialized_aggregation_config_proto = AggregationConfigProto::parse(
124124
serialized_aggregation_config.as_bytes(),
125125
)
126126
.map_err(|e| status::internal(format!("Failed to parse AggregationConfigProto: {}", e)))?;
127-
serialized_aggregation_config = cxx::UniquePtr::null(); // Release memory.
128127
let aggregation_config =
129128
AggregationConfig::from_proto(serialized_aggregation_config_proto, ())?;
130129
Self::new(aggregation_config)
131130
}
132131

133132
fn new_from_serialized_state(
134-
mut serialized_server_accumulator: cxx::UniquePtr<cxx::CxxString>,
133+
serialized_server_accumulator: cxx::UniquePtr<cxx::CxxString>,
135134
) -> Result<Self, StatusError> {
136135
let serialized_server_accumulator_proto = ServerAccumulatorState::parse(
137136
serialized_server_accumulator.as_bytes(),
138137
)
139138
.map_err(|e| status::internal(format!("Failed to parse ServerAccumulatorState: {}", e)))?;
140-
serialized_server_accumulator = cxx::UniquePtr::null(); // Release memory.
141139
Self::from_proto(serialized_server_accumulator_proto, ())
142140
}
143141

@@ -174,16 +172,17 @@ impl ServerAccumulator {
174172

175173
fn process_client_messages_serialized(
176174
&mut self,
177-
mut client_messages: cxx::UniquePtr<cxx::CxxString>,
175+
client_messages: cxx::UniquePtr<cxx::CxxString>,
178176
) -> Result<(), StatusError> {
179177
let client_messages_proto = ClientMessageList::parse(client_messages.as_bytes())
180178
.map_err(|e| status::internal(format!("Failed to parse ClientMessageList: {}", e)))?;
181-
client_messages = cxx::UniquePtr::null(); // Release memory.
179+
std::mem::drop(client_messages); // Release memory early. `client_messages` can be huge.
182180
let client_messages: Result<Vec<_>, _> = client_messages_proto
183181
.client_messages()
184182
.iter()
185183
.map(|m| ClientMessage::from_proto(m, &self.server))
186184
.collect();
185+
std::mem::drop(client_messages_proto);
187186
self.process_client_messages(client_messages?);
188187
Ok(())
189188
}

0 commit comments

Comments
 (0)