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

Method Read

Kernel/src/objects/message.cpp:39–76  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37}
38
39int64_t MessageEndpoint::Read(uint64_t* id, uint16_t* size, uint64_t* data){
40 assert(id);
41 assert(size);
42 assert(data);
43
44 Message m;
45
46 acquireLock(&queueLock);
47 int r = queue.Dequeue(&m, 1);
48 releaseLock(&queueLock);
49 if(r < 1){
50 if(!peer.get()){
51 return -ENOTCONN;
52 }
53 return 0;
54 }
55
56 queueAvailablilitySemaphore.Signal();
57
58 *id = m.id;
59 *size = m.size;
60
61 if(m.size <= 8){
62 *data = m.data;
63 } else {
64 memcpy(data, m.dataP, m.size);
65 }
66
67 if(debugLevelMessageEndpoint >= DebugLevelVerbose){
68 Log::Info("[MessageEndpoint] Receiving message (ID: %u, Size: %u)", m.id, m.size);
69 }
70
71 if(m.size > 8 && m.dataP){
72 delete[] m.dataP;
73 }
74
75 return 1;
76}
77
78int64_t MessageEndpoint::Call(uint64_t id, uint16_t size, uint64_t data, uint64_t rID, uint16_t* rSize, uint64_t* rData, int64_t timeout){
79 if(!peer.get()){

Callers

nothing calls this directly

Calls 5

memcpyFunction · 0.85
InfoFunction · 0.85
SignalMethod · 0.80
DequeueMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected