Revision 37cd5dc2 src/urt_subscriber.c

View differences:

src/urt_subscriber.c
87 87
      return URT_STATUS_SUBSCRIBE_TOPICSET;
88 88

  
89 89
  subscriber->base.topic = topic;
90
  //TODO: Lock topic
90
  urtMutexLock(topic->lock);
91 91

  
92 92
  if (messages)
93 93
  {
......
109 109
    topic->numHrtSubscribers--;
110 110
#endif /* URT_CFG_PUBSUB_PROFILING */
111 111

  
112
  //TODO: Unlock topic
112
  urtMutexUnlock(topic->lock);
113 113
  return URT_STATUS_OK;
114 114
}
115 115

  
......
160 160
  if (subscriber->base.topic)
161 161
  {
162 162
# if(URT_CFG_PUBSUB_PROFILING == true)
163
      //TODO: LOCK TOPIC
163
      urtMutexLock(topic->lock);
164 164
      subscriber->base.topic->numSubscribers--;
165 165
# endif /* URT_CFG_PUBSUB_PROFILING */
166 166
    urtEventUnregister(subscriber->base.topic->evtSource, subscriber->base.evtListener);
167 167
# if(URT_CFG_PUBSUB_PROFILING == true)
168
      //TODO: Unlock TOPIC
168
      urtMutexUnlock(topic->lock);
169 169
      subscriber->base.topic = NULL;
170 170
      subscriber->base.lastMessage = NULL;
171 171
      subscriber->base.lastMessageTime = 0;
......
238 238
  subscriber->maxLatency = URT_DELAY_IMMEDIATE;
239 239
# endif  /* URT_CFG_PUBSUB_PROFILING */
240 240

  
241
  //TODO: Lock topic
241
  urtMutexLock(topic->lock);
242 242
  if (messages)
243 243
  {
244 244
    urt_message_t* lastMessageContribute = messages;
......
259 259
    topic->numHrtSubscribers--;
260 260
# endif /* URT_CFG_PUBSUB_PROFILING */
261 261

  
262
  //TODO: Unlock topic
262
  urtMutexUnlock(topic->lock);
263 263
  return URT_STATUS_OK;
264 264
}
265 265

  
......
323 323
  if (subscriber->base.topic)
324 324
  {
325 325
# if (URT_CFG_PUBSUB_PROFILING == true)
326
    //TODO: lock topic
326
    urtMutexLock(topic->lock);
327 327
    subscriber->base.topic->numSubscribers--;
328 328
# endif /* URT_CFG_PUBSUB_PROFILING */
329 329
    urtEventUnregister(subscriber->base.topic->evtSource, subscriber->base.evtListener);
330 330
# if (URT_CFG_PUBSUB_PROFILING == true)
331
      //TODO: unlock topic
331
      urtMutexUnlock(topic->lock);
332 332
# endif /* URT_CFG_PUBSUB_PROFILING */
333 333
    subscriber->base.topic = NULL;
334 334
    subscriber->base.lastMessage = NULL;
......
418 418
  subscriber->maxLatency = URT_DELAY_IMMEDIATE;
419 419
# endif /* URT_CFG_PUBSUB_QOS_JITTERCHECKS || URT_CFG_PUBSUB_PROFILING */
420 420

  
421
  //TODO: Lock topic
421
  urtMutexLock(topic->lock);
422 422
  if (messages)
423 423
  {
424 424
    urt_message_t* lastMessageContribute = messages;
......
439 439
  topic->numHrtSubscribers--;
440 440
# endif /* URT_CFG_PUBSUB_PROFILING */
441 441

  
442
  //TODO: Unlock topic
442
  urtMutexUnlock(topic->lock);
443 443
  return URT_STATUS_OK;
444 444
}
445 445

  
......
483 483
 */
484 484
bool urtFrtSubscriberCalculateValidity(urt_frtsubscriber_t* subscriber, urt_delay_t latency)
485 485
{
486
# if (URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true && URT_CFG_PUBSUB_QOS_JITTERCHECKS == true)
487
  if (latency < subscriber->deadlineOffset && latency < subscriber->maxJitter)
486
#if (URT_CFG_PUBSUB_QOS_JITTERCHECKS == true || URT_CFG_PUBSUB_PROFILING == true)
487
  if (latency > subscriber->minLatency && latency < subscriber->maxLatency)
488 488
    return true;
489
#endif /* URT_CFG_PUBSUB_QOS_JITTERCHECKS || URT_CFG_PUBSUB_PROFILING */
490

  
491
# if (URT_CFG_PUBSUB_QOS_JITTERCHECKS == true)
492
  if (latency < subscriber->minLatency && subscriber->maxLatency-subscriber->maxJitter < latency)
493
      return true;
494

  
495
  if (latency > subscriber->maxLatency && subscriber->minLatency+subscriber->maxJitter > latency)
496
      return true;
489 497
# endif /* URT_CFG_PUBSUB_QOS_DEADLINECHECKS && URT_CFG_PUBSUB_QOS_JITTERCHECKS */
490 498

  
491 499
  return false;
......
505 513

  
506 514
  if (subscriber->base.topic)
507 515
  {
508
    //TODO: lock topic
516
    urtMutexLock(topic->lock);
509 517
    urtEventUnregister(subscriber->base.topic->evtSource, subscriber->base.evtListener);
510 518
    //TODO: decrement topic's HRT counter
511 519
# if (URT_CFG_PUBSUB_PROFILING == true)
......
514 522
//Hier weiter
515 523

  
516 524
# if (URT_CFG_PUBSUB_PROFILING == true)
517
    //TODO: unlock topic
525
    urtMutexUnlock(topic->lock);
518 526
# endif /* URT_CFG_PUBSUB_PROFILING */
519 527
    subscriber->base.topic = NULL;
520 528
    subscriber->base.lastMessage = NULL;
......
616 624
  subscriber->expectedRate = rate;
617 625
# endif /* URT_CFG_PUBSUB_QOS_RATECHECKS */
618 626

  
619
  //TODO: Lock topic
627
  urtMutexLock(topic->lock);
620 628
  if (messages)
621 629
  {
622 630
    urt_message_t* lastMessageContribute = messages;
......
642 650
  topic->numSubscribers--;
643 651
# endif /* URT_CFG_PUBSUB_PROFILING */
644 652

  
645
  //TODO: Unlock topic
653
  urtMutexUnlock(topic->lock);
646 654
  return URT_STATUS_OK;
647 655
}
648 656

  
......
692 700

  
693 701
  if (subscriber->base.topic)
694 702
  {
695
    //TODO: lock topic
703
    urtMutexLock(topic->lock);
696 704
    urtEventUnregister(subscriber->base.topic->evtSource, subscriber->base.evtListener);
697 705
    subscriber->base.topic->numHrtSubscribers--;
698 706
# if (URT_CFG_PUBSUB_PROFILING == true)
......
704 712
# endif /* URT_CFG_PUBSUB_QOS_RATECHECKS */
705 713

  
706 714
    urt_message_t* messageTemp = subscriber->base.lastMessage;
715
    bool hrtZero = false;
707 716
    while (messageTemp->next->originTime < messageTemp->originTime)
708 717
    {
709 718
        messageTemp = messageTemp->next;
710 719
        messageTemp->numHrtConsumersLeft--;
720
        if (messageTemp->numHrtConsumersLeft == 0)
721
        {
722
            hrtZero = true;
723
        }
711 724
# if(URT_CFG_PUBSUB_PROFILING == true)
712 725
        messageTemp->numConsumersLeft--;
713 726
# endif /* URT_CFG_PUBSUB_PROFILING */
714 727
    }
715
    bool temp = false;
716
    if (temp /*TODO: HRT counter of any message became 0?*/)
728
    if (hrtZero)
717 729
    {
718
      //TODO: signal topics condition variable
730
      urtCondvarSignal(subscriber->base.topic->hrtReleased);
719 731
    }
720 732

  
721
    //TODO: unlock topic
733
    urtMutexUnlock(topic->lock);
722 734
    subscriber->base.topic = NULL;
723 735
    subscriber->base.lastMessage = NULL;
724 736
    subscriber->base.lastMessageTime = 0;

Also available in: Unified diff