Permalink
Browse files
Prevent robot from freezing if SmartDashboard freezes
- Loading branch information...
|
|
@@ -20,6 +20,17 @@ NetworkTableEntry::NetworkTableEntry(EntryId _id, std::string& _name, SequenceNu |
|
|
m_isDirty = false;
|
|
|
}
|
|
|
|
|
|
+NetworkTableEntry::NetworkTableEntry(const NetworkTableEntry &other) :
|
|
|
+ name(other.name),
|
|
|
+ id(other.id),
|
|
|
+ sequenceNumber(other.sequenceNumber),
|
|
|
+ type(other.type),
|
|
|
+ m_isNew(other.m_isNew),
|
|
|
+ m_isDirty(other.m_isDirty)
|
|
|
+{
|
|
|
+ value = type->copyValue(other.value);
|
|
|
+}
|
|
|
+
|
|
|
NetworkTableEntry::~NetworkTableEntry(){
|
|
|
type->deleteValue(value);
|
|
|
}
|
|
|
|
|
|
@@ -42,6 +42,7 @@ class NetworkTableEntry { |
|
|
|
|
|
NetworkTableEntry(std::string& name, NetworkTableEntryType* type, EntryValue value);
|
|
|
NetworkTableEntry(EntryId id, std::string& name, SequenceNumber sequenceNumber, NetworkTableEntryType* type, EntryValue value);
|
|
|
+ NetworkTableEntry(const NetworkTableEntry &);
|
|
|
virtual ~NetworkTableEntry();
|
|
|
|
|
|
EntryId GetId();
|
|
|
|
|
|
@@ -97,21 +97,35 @@ void WriteManager::run() { |
|
|
entry = ((std::queue<NetworkTableEntry*>*)outgoingAssignmentQueue)->front();
|
|
|
((std::queue<NetworkTableEntry*>*)outgoingAssignmentQueue)->pop();
|
|
|
{
|
|
|
- NTSynchronized sync(entryStore.LOCK);
|
|
|
- entry->MakeClean();
|
|
|
- wrote = true;
|
|
|
+ NetworkTableEntry * entryCopy;
|
|
|
+
|
|
|
+ {
|
|
|
+ NTSynchronized sync(entryStore.LOCK);
|
|
|
+ entry->MakeClean();
|
|
|
+ wrote = true;
|
|
|
+ entryCopy = new NetworkTableEntry(*entry);
|
|
|
+ }
|
|
|
+
|
|
|
receiver.offerOutgoingAssignment(entry);
|
|
|
+ delete entryCopy;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
while(!((std::queue<NetworkTableEntry*>*)outgoingUpdateQueue)->empty()){
|
|
|
entry = ((std::queue<NetworkTableEntry*>*)outgoingUpdateQueue)->front();
|
|
|
((std::queue<NetworkTableEntry*>*)outgoingUpdateQueue)->pop();
|
|
|
{
|
|
|
- NTSynchronized sync(entryStore.LOCK);
|
|
|
- entry->MakeClean();
|
|
|
- wrote = true;
|
|
|
+ NetworkTableEntry * entryCopy;
|
|
|
+
|
|
|
+ {
|
|
|
+ NTSynchronized sync(entryStore.LOCK);
|
|
|
+ entry->MakeClean();
|
|
|
+ wrote = true;
|
|
|
+ entryCopy = new NetworkTableEntry(*entry);
|
|
|
+ }
|
|
|
+
|
|
|
receiver.offerOutgoingUpdate(entry);
|
|
|
+ delete entryCopy;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
0 comments on commit
06c9bcf