diff --git a/src/sf_file_writer.c b/src/sf_file_writer.c index 4ceeac9..1326e78 100644 --- a/src/sf_file_writer.c +++ b/src/sf_file_writer.c @@ -394,7 +394,8 @@ int sf_file_writer_deal_versioned_buffer(SFFileWriterInfo *writer, return 0; } -int sf_file_writer_save_buffer(SFFileWriterInfo *writer, const int length) +int sf_file_writer_save_buffer_ex(SFFileWriterInfo *writer, + const int length, const bool flush) { int result; @@ -408,9 +409,8 @@ int sf_file_writer_save_buffer(SFFileWriterInfo *writer, const int length) } writer->binlog_buffer.data_end += length; - - if (SF_BINLOG_BUFFER_PRODUCER_BUFF_REMAIN(writer->binlog_buffer) < - writer->cfg.max_record_size) + if (flush || SF_BINLOG_BUFFER_PRODUCER_BUFF_REMAIN(writer-> + binlog_buffer) < writer->cfg.max_record_size) { return sf_file_writer_flush(writer); } else { diff --git a/src/sf_file_writer.h b/src/sf_file_writer.h index 8ad1f10..9a51d3a 100644 --- a/src/sf_file_writer.h +++ b/src/sf_file_writer.h @@ -100,7 +100,22 @@ int sf_file_writer_fsync(SFFileWriterInfo *writer); #define SF_FILE_WRITER_NEXT_DATA_VERSION(writer) \ ++((writer)->last_versions.pending) -int sf_file_writer_save_buffer(SFFileWriterInfo *writer, const int length); +int sf_file_writer_save_buffer_ex(SFFileWriterInfo *writer, + const int length, const bool flush); + +static inline int sf_file_writer_save_buffer( + SFFileWriterInfo *writer, const int length) +{ + const bool flush = false; + return sf_file_writer_save_buffer_ex(writer, length, flush); +} + +static inline int sf_file_writer_flush_buffer( + SFFileWriterInfo *writer, const int length) +{ + const bool flush = true; + return sf_file_writer_save_buffer_ex(writer, length, flush); +} static inline void sf_file_writer_set_flags( SFFileWriterInfo *writer, const short flags)