MCPcopy Create free account
hub / github.com/LemonOSProject/LemonOS / Enqueue

Method Enqueue

Kernel/include/ringbuffer.h:30–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28 }
29
30 void Enqueue(T* data){
31 acquireLock(&dequeueLock);
32 acquireLock(&enqueueLock);
33
34 memcpy(enqueuePointer++, data, sizeof(T));
35
36 if(enqueuePointer >= bufferEnd){
37 enqueuePointer = buffer;
38 }
39
40 if(enqueuePointer == dequeuePointer){
41
42 T* oldBuffer = buffer;
43 T* oldBufferEnd = bufferEnd;
44
45 bufferSize = (bufferSize + 2) << 1;
46
47 buffer = reinterpret_cast<T*>(kmalloc(sizeof(T) * bufferSize));
48 bufferEnd = &buffer[bufferSize - 1];
49
50 memcpy(bufferEnd - (oldBufferEnd - dequeuePointer), dequeuePointer, oldBufferEnd - dequeuePointer);
51
52 dequeuePointer = bufferEnd - (oldBufferEnd - dequeuePointer);
53 enqueuePointer = buffer + (enqueuePointer - oldBuffer);
54
55 kfree(oldBuffer);
56 }
57 releaseLock(&enqueueLock);
58 releaseLock(&dequeueLock);
59 }
60
61 int Dequeue(T* data, size_t amount){
62 acquireLock(&dequeueLock);

Callers 1

WriteMethod · 0.80

Calls 3

memcpyFunction · 0.85
kmallocFunction · 0.85
kfreeFunction · 0.85

Tested by

no test coverage detected