Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
LARN
PRRT
Commits
70d02f04
Commit
70d02f04
authored
Dec 15, 2017
by
Andreas Schmidt
Browse files
Rename receiveDataQueue into packetDeliveryStore.
parent
ce45efc6
Pipeline
#1709
failed with stages
in 1 minute and 16 seconds
Changes
9
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
prrt/cprrt.pxd
View file @
70d02f04
...
...
@@ -106,7 +106,7 @@ cdef extern from "proto/socket.h":
pthread_t
receiveDataThread
pthread_mutex_t
inQueueFilledMutex
pthread_cond_t
inQueueFilledMutexCv
Prrt
ReceiveDataQueue
*
receiveDataQueu
e
Prrt
PacketDeliveryStore
*
packetDeliveryStor
e
BPTreeNode
*
dataStore
...
...
@@ -147,8 +147,8 @@ cdef extern from "proto/socket.h":
cdef
extern
from
"proto/stores/
receiveDataQueu
e.h"
:
ctypedef
struct
Prrt
ReceiveDataQueu
e
:
cdef
extern
from
"proto/stores/
packetDeliveryStor
e.h"
:
ctypedef
struct
Prrt
PacketDeliveryStor
e
:
pass
cdef
extern
from
"util/bptree.h"
:
...
...
prrt/proto/CMakeLists.txt
View file @
70d02f04
...
...
@@ -18,6 +18,6 @@ add_library(PRRT ../defines.h
stores/packetTimeoutTable.c stores/packetTimeoutTable.h
stores/dataPacketStore.c stores/dataPacketStore.h
types/packetTimeout.c types/packetTimeout.h
stores/
receiveDataQueue.c stores/receiveDataQueu
e.h
)
stores/
packetDeliveryStore.c stores/packetDeliveryStor
e.h
)
target_link_libraries
(
PRRT rt
)
prrt/proto/processes/dataReceiver.c
View file @
70d02f04
...
...
@@ -35,7 +35,7 @@ static void decode_block(PrrtSocket *sock_ptr, PrrtBlock *block) {
while
(
List_count
(
block
->
dataPackets
)
>
0
)
{
PrrtPacket
*
pkt
=
List_shift
(
block
->
dataPackets
);
if
(
PrrtDeliveredPacketTable_test_set_is_number_relevant
(
sock_ptr
->
deliveredPacketTable
,
pkt
->
sequenceNumber
))
{
Prrt
ReceiveDataQueu
e_insert
(
sock_ptr
->
receiveDataQueu
e
,
pkt
);
Prrt
PacketDeliveryStor
e_insert
(
sock_ptr
->
packetDeliveryStor
e
,
pkt
);
}
else
{
PrrtPacket_destroy
(
pkt
);
}
...
...
@@ -141,7 +141,7 @@ static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct
XlapTimeStampClock
(
sock_ptr
,
ts_data_packet
,
seqno
,
PrrtReturnPackage
);
XlapTimeStampCycle
(
sock_ptr
,
ts_data_packet
,
seqno
,
PrrtReturnPackage
);
Prrt
ReceiveDataQueu
e_insert
(
sock_ptr
->
receiveDataQueu
e
,
packet
);
Prrt
PacketDeliveryStor
e_insert
(
sock_ptr
->
packetDeliveryStor
e
,
packet
);
}
return
;
...
...
prrt/proto/socket.c
View file @
70d02f04
...
...
@@ -103,7 +103,7 @@ PrrtSocket *PrrtSocket_create(const bool is_sender, prrtTimedelta_t target_delay
s
->
deliveredPacketTable
=
PrrtDeliveredPacketTable_create
();
s
->
repairBlockStore
=
PrrtRepairBlockStore_create
();
s
->
receiveDataQueue
=
PrrtReceiveDataQueu
e_create
();
s
->
packetDeliveryStore
=
PrrtPacketDeliveryStor
e_create
();
}
return
s
;
...
...
@@ -273,7 +273,7 @@ int32_t PrrtSocket_receive_asap(PrrtSocket *s, void *buf_ptr) {
check
(
s
->
isSender
==
false
,
"Cannot receive on sender socket."
)
PrrtPacket
*
packet
;
packet
=
Prrt
ReceiveDataQueue_get_packet
(
s
->
receiveDataQueu
e
,
0
,
MAX_TIMESTAMP
);
packet
=
Prrt
PacketDeliveryStore_get_packet
(
s
->
packetDeliveryStor
e
,
0
,
MAX_TIMESTAMP
);
return
deliver_packet
(
s
,
buf_ptr
,
packet
);
error:
...
...
@@ -286,7 +286,7 @@ int32_t PrrtSocket_receive_asap_wait(PrrtSocket *s, void *buf_ptr) {
PrrtPacket
*
packet
;
do
{
packet
=
Prrt
ReceiveDataQueu
e_get_packet_wait
(
s
->
receiveDataQueu
e
,
0
,
MAX_TIMESTAMP
);
packet
=
Prrt
PacketDeliveryStor
e_get_packet_wait
(
s
->
packetDeliveryStor
e
,
0
,
MAX_TIMESTAMP
);
if
(
PrrtSocket_closing
(
s
))
{
return
-
1
;
}
...
...
@@ -302,7 +302,7 @@ int32_t PrrtSocket_receive_asap_wait(PrrtSocket *s, void *buf_ptr) {
int32_t
PrrtSocket_receive_asap_timedwait
(
PrrtSocket
*
s
,
void
*
buf_ptr
,
struct
timespec
*
deadline
)
{
check
(
s
->
isSender
==
false
,
"Cannot receive on sender socket."
)
PrrtPacket
*
packet
=
Prrt
ReceiveDataQueu
e_get_packet_timedwait
(
s
->
receiveDataQueu
e
,
0
,
MAX_TIMESTAMP
,
deadline
);
PrrtPacket
*
packet
=
Prrt
PacketDeliveryStor
e_get_packet_timedwait
(
s
->
packetDeliveryStor
e
,
0
,
MAX_TIMESTAMP
,
deadline
);
return
deliver_packet
(
s
,
buf_ptr
,
packet
);
error:
...
...
@@ -320,7 +320,8 @@ int32_t PrrtSocket_receive_ordered(PrrtSocket *s, void *buf_ptr, prrtTimedelta_t
check
(
s
->
isSender
==
false
,
"Cannot receive on sender socket."
)
prrtTimestamp_t
now
=
PrrtClock_get_current_time_us
();
PrrtPacket
*
packet
=
PrrtReceiveDataQueue_get_packet
(
s
->
receiveDataQueue
,
now
-
time_window_us
,
now
+
time_window_us
);
PrrtPacket
*
packet
=
PrrtPacketDeliveryStore_get_packet
(
s
->
packetDeliveryStore
,
now
-
time_window_us
,
now
+
time_window_us
);
return
deliver_packet
(
s
,
buf_ptr
,
packet
);
error:
PERROR
(
"There was a failure while receiving from socket.%s"
,
""
);
...
...
@@ -335,7 +336,8 @@ int32_t PrrtSocket_receive_ordered_wait(PrrtSocket *s, void *buf_ptr, prrtTimede
prrtTimestamp_t
now
=
PrrtClock_get_current_time_us
();
struct
timespec
deadline
=
abstime_from_now
(
time_window_us
);
packet
=
PrrtReceiveDataQueue_get_packet_timedwait
(
s
->
receiveDataQueue
,
now
-
time_window_us
,
now
+
time_window_us
,
&
deadline
);
packet
=
PrrtPacketDeliveryStore_get_packet_timedwait
(
s
->
packetDeliveryStore
,
now
-
time_window_us
,
now
+
time_window_us
,
&
deadline
);
if
(
PrrtSocket_closing
(
s
))
{
return
-
1
;
}
...
...
@@ -353,7 +355,8 @@ int32_t PrrtSocket_receive_ordered_timedwait(PrrtSocket *s, void *buf_ptr, prrtT
prrtTimestamp_t
now
=
PrrtClock_get_current_time_us
();
PrrtPacket
*
packet
=
PrrtReceiveDataQueue_get_packet_timedwait
(
s
->
receiveDataQueue
,
now
-
time_window_us
,
now
+
time_window_us
,
deadline
);
PrrtPacket
*
packet
=
PrrtPacketDeliveryStore_get_packet_timedwait
(
s
->
packetDeliveryStore
,
now
-
time_window_us
,
now
+
time_window_us
,
deadline
);
return
deliver_packet
(
s
,
buf_ptr
,
packet
);
error:
PERROR
(
"There was a failure while receiving from socket.%s"
,
""
);
...
...
@@ -364,8 +367,8 @@ int32_t PrrtSocket_receive_ordered_timedwait(PrrtSocket *s, void *buf_ptr, prrtT
int
PrrtSocket_interrupt
(
PrrtSocket
*
s
)
{
atomic_store_explicit
(
&
s
->
closing
,
true
,
memory_order_release
);
if
(
s
->
receiveDataQueu
e
)
Prrt
ReceiveDataQueue_wake
(
s
->
receiveDataQueu
e
);
if
(
s
->
packetDeliveryStor
e
)
Prrt
PacketDeliveryStore_wake
(
s
->
packetDeliveryStor
e
);
void
**
res
=
NULL
;
...
...
@@ -420,9 +423,9 @@ int PrrtSocket_close(PrrtSocket *s) {
s
->
sendDataQueue
=
NULL
;
}
if
(
s
->
receiveDataQueu
e
!=
NULL
)
{
Prrt
ReceiveDataQueue_destroy
(
s
->
receiveDataQueu
e
);
s
->
receiveDataQueu
e
=
NULL
;
if
(
s
->
packetDeliveryStor
e
!=
NULL
)
{
Prrt
PacketDeliveryStore_destroy
(
s
->
packetDeliveryStor
e
);
s
->
packetDeliveryStor
e
=
NULL
;
}
if
(
s
->
deliveredPacketTable
!=
NULL
)
{
...
...
prrt/proto/socket.h
View file @
70d02f04
...
...
@@ -14,7 +14,7 @@
#include
"stores/deliveredPacketTable.h"
#include
"stores/packetTimeoutTable.h"
#include
"stores/repairBlockStore.h"
#include
"stores/
receiveDataQueu
e.h"
#include
"stores/
packetDeliveryStor
e.h"
#include
"clock.h"
#include
"../xlap/xlap.h"
#include
"receiver.h"
...
...
@@ -39,7 +39,7 @@ typedef struct prrtSocket {
MPSCQueue
*
sendDataQueue
;
pthread_t
receiveDataThread
;
Prrt
ReceiveDataQueue
*
receiveDataQueu
e
;
Prrt
PacketDeliveryStore
*
packetDeliveryStor
e
;
PrrtPacketTimeoutTable
*
packetTimeoutTable
;
...
...
prrt/proto/stores/
receiveDataQueu
e.c
→
prrt/proto/stores/
packetDeliveryStor
e.c
View file @
70d02f04
...
...
@@ -2,10 +2,10 @@
#include
"../packet.h"
#include
"../../util/common.h"
#include
"../../util/dbg.h"
#include
"
receiveDataQueu
e.h"
#include
"
packetDeliveryStor
e.h"
Prrt
ReceiveDataQueue
*
PrrtReceiveDataQueu
e_create
()
{
Prrt
ReceiveDataQueue
*
q
=
(
PrrtReceiveDataQueu
e
*
)
calloc
(
1
,
sizeof
(
Prrt
ReceiveDataQueu
e
));
Prrt
PacketDeliveryStore
*
PrrtPacketDeliveryStor
e_create
()
{
Prrt
PacketDeliveryStore
*
q
=
(
PrrtPacketDeliveryStor
e
*
)
calloc
(
1
,
sizeof
(
Prrt
PacketDeliveryStor
e
));
q
->
tree
=
NULL
;
pthread_mutexattr_t
attr
;
...
...
@@ -21,16 +21,16 @@ PrrtReceiveDataQueue *PrrtReceiveDataQueue_create() {
return
NULL
;
}
PrrtPacket
*
Prrt
ReceiveDataQueu
e_get_packet_timedwait
(
Prrt
ReceiveDataQueu
e
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
,
const
struct
timespec
*
deadline
)
{
PrrtPacket
*
Prrt
PacketDeliveryStor
e_get_packet_timedwait
(
Prrt
PacketDeliveryStor
e
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
,
const
struct
timespec
*
deadline
)
{
PrrtPacket
*
packet
=
NULL
;
check
(
pthread_mutex_lock
(
&
q
->
lock
)
==
EXIT_SUCCESS
,
"Lock failed."
);
packet
=
Prrt
ReceiveDataQueu
e_get_packet
(
q
,
start
,
stop
);
packet
=
Prrt
PacketDeliveryStor
e_get_packet
(
q
,
start
,
stop
);
if
(
!
packet
)
{
pthread_cond_timedwait
(
&
q
->
wait_for_data
,
&
q
->
lock
,
deadline
);
packet
=
Prrt
ReceiveDataQueu
e_get_packet
(
q
,
start
,
stop
);
packet
=
Prrt
PacketDeliveryStor
e_get_packet
(
q
,
start
,
stop
);
}
check
(
pthread_mutex_unlock
(
&
q
->
lock
)
==
EXIT_SUCCESS
,
"Unlock failed."
);
...
...
@@ -38,20 +38,20 @@ PrrtPacket * PrrtReceiveDataQueue_get_packet_timedwait(PrrtReceiveDataQueue *q,
return
packet
;
error:
PERROR
(
"Prrt
ReceiveDataQueu
e_get_packet_timedwait failed%s."
,
""
);
PERROR
(
"Prrt
PacketDeliveryStor
e_get_packet_timedwait failed%s."
,
""
);
return
NULL
;
}
PrrtPacket
*
Prrt
ReceiveDataQueu
e_get_packet_wait
(
Prrt
ReceiveDataQueu
e
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
)
{
PrrtPacket
*
Prrt
PacketDeliveryStor
e_get_packet_wait
(
Prrt
PacketDeliveryStor
e
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
)
{
PrrtPacket
*
packet
=
NULL
;
check
(
pthread_mutex_lock
(
&
q
->
lock
)
==
EXIT_SUCCESS
,
"Lock failed."
);
packet
=
Prrt
ReceiveDataQueu
e_get_packet
(
q
,
start
,
stop
);
packet
=
Prrt
PacketDeliveryStor
e_get_packet
(
q
,
start
,
stop
);
if
(
!
packet
)
{
pthread_cond_wait
(
&
q
->
wait_for_data
,
&
q
->
lock
);
packet
=
Prrt
ReceiveDataQueu
e_get_packet
(
q
,
start
,
stop
);
packet
=
Prrt
PacketDeliveryStor
e_get_packet
(
q
,
start
,
stop
);
}
check
(
pthread_mutex_unlock
(
&
q
->
lock
)
==
EXIT_SUCCESS
,
"Unlock failed."
);
...
...
@@ -59,11 +59,11 @@ PrrtPacket * PrrtReceiveDataQueue_get_packet_wait(PrrtReceiveDataQueue *q, prrtT
return
packet
;
error:
PERROR
(
"Prrt
ReceiveDataQueu
e_get_packet_timedwait failed%s."
,
""
);
PERROR
(
"Prrt
PacketDeliveryStor
e_get_packet_timedwait failed%s."
,
""
);
return
NULL
;
}
PrrtPacket
*
Prrt
ReceiveDataQueue_get_packet
(
PrrtReceiveDataQueu
e
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
)
{
PrrtPacket
*
Prrt
PacketDeliveryStore_get_packet
(
PrrtPacketDeliveryStor
e
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
)
{
PrrtPacket
*
packet
=
NULL
;
check
(
pthread_mutex_lock
(
&
q
->
lock
)
==
EXIT_SUCCESS
,
"Lock failed."
);
...
...
@@ -90,7 +90,7 @@ PrrtPacket *PrrtReceiveDataQueue_get_packet(PrrtReceiveDataQueue *q, prrtTimesta
return
NULL
;
}
bool
Prrt
ReceiveDataQueue_insert
(
PrrtReceiveDataQueu
e
*
q
,
PrrtPacket
*
packet
)
{
bool
Prrt
PacketDeliveryStore_insert
(
PrrtPacketDeliveryStor
e
*
q
,
PrrtPacket
*
packet
)
{
check
(
pthread_mutex_lock
(
&
q
->
lock
)
==
EXIT_SUCCESS
,
"Lock failed."
);
q
->
tree
=
BPTree_insert
(
q
->
tree
,
PrrtDataPacket_packet_timeout
(
packet
),
packet
);
pthread_cond_broadcast
(
&
q
->
wait_for_data
);
...
...
@@ -102,14 +102,14 @@ bool PrrtReceiveDataQueue_insert(PrrtReceiveDataQueue *q, PrrtPacket* packet) {
return
false
;
}
bool
Prrt
ReceiveDataQueue_destroy
(
PrrtReceiveDataQueu
e
*
q
)
{
bool
Prrt
PacketDeliveryStore_destroy
(
PrrtPacketDeliveryStor
e
*
q
)
{
pthread_mutex_destroy
(
&
q
->
lock
);
pthread_cond_destroy
(
&
q
->
wait_for_data
);
free
(
q
);
return
true
;
}
void
Prrt
ReceiveDataQueue_wake
(
PrrtReceiveDataQueu
e
*
q
)
{
void
Prrt
PacketDeliveryStore_wake
(
PrrtPacketDeliveryStor
e
*
q
)
{
pthread_mutex_lock
(
&
q
->
lock
);
pthread_cond_broadcast
(
&
q
->
wait_for_data
);
pthread_mutex_unlock
(
&
q
->
lock
);
...
...
prrt/proto/stores/packetDeliveryStore.h
0 → 100644
View file @
70d02f04
#ifndef PRRT_RECEIVEDATAQUEUE_H
#define PRRT_RECEIVEDATAQUEUE_H
#include
<sys/types.h>
#include
"../../util/bptree.h"
typedef
struct
prrtReceiveDataQueue
{
pthread_mutex_t
lock
;
BPTreeNode
*
tree
;
pthread_cond_t
wait_for_data
;
}
PrrtPacketDeliveryStore
;
PrrtPacketDeliveryStore
*
PrrtPacketDeliveryStore_create
(
void
);
PrrtPacket
*
PrrtPacketDeliveryStore_get_packet
(
PrrtPacketDeliveryStore
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
);
PrrtPacket
*
PrrtPacketDeliveryStore_get_packet_wait
(
PrrtPacketDeliveryStore
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
);
PrrtPacket
*
PrrtPacketDeliveryStore_get_packet_timedwait
(
PrrtPacketDeliveryStore
*
queue
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
,
const
struct
timespec
*
deadline
);
bool
PrrtPacketDeliveryStore_insert
(
PrrtPacketDeliveryStore
*
q
,
PrrtPacket
*
packet
);
void
PrrtPacketDeliveryStore_wake
(
PrrtPacketDeliveryStore
*
q
);
bool
PrrtPacketDeliveryStore_destroy
(
PrrtPacketDeliveryStore
*
q
);
#endif //PRRT_RECEIVEDATAQUEUE_H
prrt/proto/stores/receiveDataQueue.h
deleted
100644 → 0
View file @
ce45efc6
#ifndef PRRT_RECEIVEDATAQUEUE_H
#define PRRT_RECEIVEDATAQUEUE_H
#include
<sys/types.h>
#include
"../../util/bptree.h"
typedef
struct
prrtReceiveDataQueue
{
pthread_mutex_t
lock
;
BPTreeNode
*
tree
;
pthread_cond_t
wait_for_data
;
}
PrrtReceiveDataQueue
;
PrrtReceiveDataQueue
*
PrrtReceiveDataQueue_create
(
void
);
PrrtPacket
*
PrrtReceiveDataQueue_get_packet
(
PrrtReceiveDataQueue
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
);
PrrtPacket
*
PrrtReceiveDataQueue_get_packet_wait
(
PrrtReceiveDataQueue
*
q
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
);
PrrtPacket
*
PrrtReceiveDataQueue_get_packet_timedwait
(
PrrtReceiveDataQueue
*
queue
,
prrtTimestamp_t
start
,
prrtTimestamp_t
stop
,
const
struct
timespec
*
deadline
);
bool
PrrtReceiveDataQueue_insert
(
PrrtReceiveDataQueue
*
q
,
PrrtPacket
*
packet
);
void
PrrtReceiveDataQueue_wake
(
PrrtReceiveDataQueue
*
q
);
bool
PrrtReceiveDataQueue_destroy
(
PrrtReceiveDataQueue
*
q
);
#endif //PRRT_RECEIVEDATAQUEUE_H
prrt/prrt.pyx
View file @
70d02f04
...
...
@@ -21,7 +21,7 @@ cdef extern from "proto/stores/packetTimeoutTable.c":
cdef
extern
from
"proto/stores/repairBlockStore.c"
:
pass
cdef
extern
from
"proto/stores/
receiveDataQueu
e.c"
:
cdef
extern
from
"proto/stores/
packetDeliveryStor
e.c"
:
pass
cdef
extern
from
"proto/types/packetTimeout.c"
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment