forked from SerenityOS/serenity
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revert "Kernel: Make DoubleBuffer use a KBuffer instead of kmalloc()ing"
This reverts commit 1cca514. This appears to be causing intermittent triple-faults and I don't know why yet, so I'll just revert it to keep the tree in decent shape.
- Loading branch information
1 parent
1cca514
commit ec65b8d
Showing
5 changed files
with
34 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,34 @@ | ||
#pragma once | ||
|
||
#include <AK/Types.h> | ||
#include <Kernel/KBuffer.h> | ||
#include <AK/Vector.h> | ||
#include <Kernel/Lock.h> | ||
|
||
class DoubleBuffer { | ||
public: | ||
explicit DoubleBuffer(size_t capacity = 65536); | ||
DoubleBuffer() | ||
: m_write_buffer(&m_buffer1) | ||
, m_read_buffer(&m_buffer2) | ||
{ | ||
} | ||
|
||
ssize_t write(const u8*, ssize_t); | ||
ssize_t read(u8*, ssize_t); | ||
|
||
bool is_empty() const { return m_empty; } | ||
|
||
size_t space_for_writing() const { return m_space_for_writing; } | ||
// FIXME: Isn't this racy? What if we get interrupted between getting the buffer pointer and dereferencing it? | ||
ssize_t bytes_in_write_buffer() const { return (ssize_t)m_write_buffer->size(); } | ||
|
||
private: | ||
void flip(); | ||
void compute_lockfree_metadata(); | ||
void compute_emptiness(); | ||
|
||
struct InnerBuffer { | ||
u8* data { nullptr }; | ||
size_t size; | ||
}; | ||
|
||
InnerBuffer* m_write_buffer { nullptr }; | ||
InnerBuffer* m_read_buffer { nullptr }; | ||
InnerBuffer m_buffer1; | ||
InnerBuffer m_buffer2; | ||
|
||
KBuffer m_storage; | ||
size_t m_capacity { 0 }; | ||
size_t m_read_buffer_index { 0 }; | ||
size_t m_space_for_writing { 0 }; | ||
Vector<u8>* m_write_buffer { nullptr }; | ||
Vector<u8>* m_read_buffer { nullptr }; | ||
Vector<u8> m_buffer1; | ||
Vector<u8> m_buffer2; | ||
ssize_t m_read_buffer_index { 0 }; | ||
bool m_empty { true }; | ||
mutable Lock m_lock { "DoubleBuffer" }; | ||
Lock m_lock { "DoubleBuffer" }; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters