mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 10:45:50 +00:00 
			
		
		
		
	fix(tests): prevent buffer corruption from concurrent log writes (#565)
std::endl triggers flush() which calls sync() on the shared log buffer.
Multiple threads racing in sync() cause str()/str("") operations to
corrupt buffer state, leading to crashes and double frees.
Added mutex to serialize access to suite.log, preventing concurrent
sync() calls on the same buffer.
			
			
This commit is contained in:
		@@ -19,9 +19,9 @@
 | 
			
		||||
 | 
			
		||||
#ifndef TEST_UNIT_TEST_SUITE_JOURNAL_H
 | 
			
		||||
#define TEST_UNIT_TEST_SUITE_JOURNAL_H
 | 
			
		||||
 | 
			
		||||
#include <ripple/beast/unit_test.h>
 | 
			
		||||
#include <ripple/beast/utility/Journal.h>
 | 
			
		||||
#include <mutex>
 | 
			
		||||
 | 
			
		||||
namespace ripple {
 | 
			
		||||
namespace test {
 | 
			
		||||
@@ -82,7 +82,13 @@ SuiteJournalSink::write(
 | 
			
		||||
 | 
			
		||||
    // Only write the string if the level at least equals the threshold.
 | 
			
		||||
    if (level >= threshold())
 | 
			
		||||
    {
 | 
			
		||||
        // std::endl flushes → sync() → str()/str("") race in shared buffer →
 | 
			
		||||
        // crashes
 | 
			
		||||
        static std::mutex log_mutex;
 | 
			
		||||
        std::lock_guard lock(log_mutex);
 | 
			
		||||
        suite_.log << s << partition_ << text << std::endl;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class SuiteJournal
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user