unix: Fix another leak of ancillary data.

This time in the datagram logic. Also clean up some of the logic
around unsetting the data from the request after adding it.
(cherry picked from commit 3fb6cfce6b4b586a5a76fc4c269c9944f06307e6)

Change-Id: I8dbb824503b8c3cbcdc2e11dde6ac03d244d1a35
Reviewed-on: https://review.haiku-os.org/c/haiku/+/8062
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
This commit is contained in:
Augustin Cavalier 2024-08-19 22:03:19 -04:00 committed by waddlesplash
parent 23b9ef334f
commit 64ec22728b
2 changed files with 5 additions and 4 deletions

View File

@ -77,9 +77,9 @@ UnixRequest::GetCurrentChunk(void*& data, size_t& size)
void
UnixRequest::SetAncillaryData(ancillary_data_container* data)
UnixRequest::UnsetAncillaryData()
{
fAncillaryData = data;
fAncillaryData = NULL;
}
@ -213,6 +213,7 @@ UnixBufferQueue::Read(UnixRequest& request)
while (entry != NULL && offsetDelta > entry->offset) {
fAncillaryData.RemoveHead();
offsetDelta -= entry->offset;
gStackModule->delete_ancillary_data_container(entry->data);
delete entry;
entry = fAncillaryData.Head();
@ -296,7 +297,7 @@ UnixBufferQueue::Write(UnixRequest& request)
if (ancillaryEntry != NULL) {
fAncillaryData.Add(ancillaryEntry);
ancillaryEntryDeleter.Detach();
request.SetAncillaryData(NULL);
request.UnsetAncillaryData();
ancillaryEntry = NULL;
}

View File

@ -47,8 +47,8 @@ public:
bool GetCurrentChunk(void*& data, size_t& size);
ancillary_data_container* AncillaryData() const { return fAncillaryData; }
void SetAncillaryData(ancillary_data_container* data);
void AddAncillaryData(ancillary_data_container* data);
void UnsetAncillaryData();
struct sockaddr_storage* Address() const { return fAddress; }