Don't attempt to stop or flush disabled writer frontends

This commit is contained in:
Tim Wojtulewicz 2024-04-10 14:17:12 -07:00
parent 4f9049278b
commit c3e869b827
2 changed files with 25 additions and 0 deletions

View file

@ -133,6 +133,11 @@ WriterFrontend::~WriterFrontend() {
} }
void WriterFrontend::Stop() { void WriterFrontend::Stop() {
if ( disabled ) {
CleanupWriteBuffer();
return;
}
FlushWriteBuffer(); FlushWriteBuffer();
SetDisable(); SetDisable();
@ -204,6 +209,11 @@ void WriterFrontend::Write(int arg_num_fields, Value** vals) {
} }
void WriterFrontend::FlushWriteBuffer() { void WriterFrontend::FlushWriteBuffer() {
if ( disabled ) {
CleanupWriteBuffer();
return;
}
if ( ! write_buffer_pos ) if ( ! write_buffer_pos )
// Nothing to do. // Nothing to do.
return; return;
@ -261,4 +271,16 @@ void WriterFrontend::DeleteVals(int num_fields, Value** vals) {
delete[] vals; delete[] vals;
} }
void WriterFrontend::CleanupWriteBuffer() {
if ( ! write_buffer || write_buffer_pos == 0 )
return;
for ( int j = 0; j < write_buffer_pos; j++ )
DeleteVals(num_fields, write_buffer[j]);
delete[] write_buffer;
write_buffer = nullptr;
write_buffer_pos = 0;
}
} // namespace zeek::logging } // namespace zeek::logging

View file

@ -206,6 +206,9 @@ protected:
static const int WRITER_BUFFER_SIZE = 1000; static const int WRITER_BUFFER_SIZE = 1000;
int write_buffer_pos; // Position of next write in buffer. int write_buffer_pos; // Position of next write in buffer.
threading::Value*** write_buffer; // Buffer of size WRITER_BUFFER_SIZE. threading::Value*** write_buffer; // Buffer of size WRITER_BUFFER_SIZE.
private:
void CleanupWriteBuffer();
}; };
} // namespace zeek::logging } // namespace zeek::logging