diff --git a/src/tests/add-ons/kernel/file_systems/Jamfile b/src/tests/add-ons/kernel/file_systems/Jamfile index c339facac6..e4bc8e74cc 100644 --- a/src/tests/add-ons/kernel/file_systems/Jamfile +++ b/src/tests/add-ons/kernel/file_systems/Jamfile @@ -1,3 +1,4 @@ SubDir OBOS_TOP src tests add-ons kernel file_systems ; SubInclude OBOS_TOP src tests add-ons kernel file_systems befs ; +SubInclude OBOS_TOP src tests add-ons kernel file_systems bfs ; diff --git a/src/tests/add-ons/kernel/file_systems/bfs/Jamfile b/src/tests/add-ons/kernel/file_systems/bfs/Jamfile new file mode 100644 index 0000000000..f408046330 --- /dev/null +++ b/src/tests/add-ons/kernel/file_systems/bfs/Jamfile @@ -0,0 +1,4 @@ +SubDir OBOS_TOP src tests add-ons kernel file_systems bfs ; + +#SubInclude OBOS_TOP src tests add-ons kernel file_systems bfs blockAllocator ; +SubInclude OBOS_TOP src tests add-ons kernel file_systems bfs bufferPool ; diff --git a/src/tests/add-ons/kernel/file_systems/bfs/bufferPool/Jamfile b/src/tests/add-ons/kernel/file_systems/bfs/bufferPool/Jamfile new file mode 100644 index 0000000000..07ac0cd640 --- /dev/null +++ b/src/tests/add-ons/kernel/file_systems/bfs/bufferPool/Jamfile @@ -0,0 +1,19 @@ +SubDir OBOS_TOP src tests add-ons kernel file_systems bfs bufferPool ; + +SubDirHdrs $(OBOS_TOP) src add-ons kernel file_systems bfs ; + +{ + local defines = [ FDefines USER DEBUG ] ; # _NO_INLINE_ASM + SubDirCcFlags $(defines) -fno-exceptions -fno-rtti ; #-fcheck-memory-usage + SubDirC++Flags $(defines) -fno-exceptions -fno-rtti ; #-fcheck-memory-usage +} + +SimpleTest bufferTest + : main.cpp + BufferPool.cpp + : ; + +# Tell Jam where to find these sources +SEARCH on [ FGristFiles BufferPool.cpp ] + = [ FDirName $(OBOS_TOP) src add-ons kernel file_systems bfs ] ; + diff --git a/src/tests/add-ons/kernel/file_systems/bfs/bufferPool/main.cpp b/src/tests/add-ons/kernel/file_systems/bfs/bufferPool/main.cpp new file mode 100644 index 0000000000..8a9b50fd74 --- /dev/null +++ b/src/tests/add-ons/kernel/file_systems/bfs/bufferPool/main.cpp @@ -0,0 +1,62 @@ +#include "BufferPool.h" + +#include +#include + + +#define BLOCK_SIZE 2048 +#define NUM_THREADS 10 +#define NUM_LOOPS 50 + + +int32 gID; + + +int32 +allocator(void *_pool) +{ + BufferPool &pool = *(BufferPool *)_pool; + int32 id = atomic_add(&gID, 1); + + for (int32 i = 0; i < NUM_LOOPS; i++) { + snooze(50000); + + printf("%ld. Get buffer...\n", id); + status_t status; + void *buffer; + if ((status = pool.GetBuffer(&buffer)) != B_OK) { + printf("\t%ld. Couldn't get buffer: %s\n", id, strerror(status)); + continue; + } + printf("\t%ld. got buffer\n", id); + snooze(50000); + pool.PutBuffer(buffer); + printf("\t%ld. released buffer\n", id); + } +} + + +int +main(int argc, char **argv) +{ + BufferPool pool; + thread_id thread[NUM_THREADS]; + + if (pool.RequestBuffers(BLOCK_SIZE) == B_OK) { + for (int i = 0; i < NUM_THREADS; i++) { + thread[i] = spawn_thread(allocator, "", B_NORMAL_PRIORITY, (void *)&pool); + if (thread[i] < B_OK) + fprintf(stderr, "Couldn't spawn thread %ld\n", i); + resume_thread(thread[i]); + } + + for (int32 i = 0; i < NUM_THREADS; i++) { + status_t status; + wait_for_thread(thread[i], &status); + } + + pool.ReleaseBuffers(); + } + + return 0; +}