summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/ImplRepo/servers_list/Terminator.cpp
blob: 88fb72467bf285fe5dfbc985c2be685e51cb6790 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/* -*- C++ -*- $Id$ */

#include "Terminator.h"
#include "ace/Log_Msg.h"
#include "ace/OS_NS_unistd.h"

int
Terminator::open(void*)
{
  if(this->activate (THR_NEW_LWP | THR_JOINABLE,
                     1) == -1)
  {
    ACE_ERROR_RETURN((LM_ERROR,
                      ACE_TEXT("Terminator::open Error spawning thread %p\n"),
                      "err="),
                     -1);
  }
  return 0;
}

int
Terminator::svc()
{
  while (1)
    {
      ACE_Message_Block* mb = 0;
      if (this->getq(mb) == -1)
        {
          ACE_ERROR_RETURN ((LM_ERROR,
                             "(%P|%t|%T) ERROR: Terminator::svc() could not get "
                             "message block from queue"), -1);
        }

      if (mb->msg_type () == ACE_Message_Block::MB_HANGUP)
        {
          mb->release ();
          this->close ();
          break;
        }
      int delay_secs = ACE_OS::atoi(mb->rd_ptr());
      ACE_OS::sleep(delay_secs);
      ACE_OS::abort();
    }
  return 0;
}