/*=========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
 * This product is protected by U.S. and international copyright
 * and intellectual property laws. Pivotal products are covered by
 * more patents listed at http://www.pivotal.io/patents.
* All Rights Reserved.
*=========================================================================
*/
#include "Service.hpp"
#include "fwklib/FwkLog.hpp"

using namespace gemfire;
using namespace gemfire::testframework;

Service::Service( int32_t threadCnt ) : m_ThreadCount( threadCnt ), m_run( true ), m_Mutex() {
  int32_t forceActive = 1;
  
  int32_t flags = THR_NEW_LWP | THR_JOINABLE | THR_CANCEL_ENABLE | THR_CANCEL_ASYNCHRONOUS;
  
#ifndef WIN32
  flags |= THR_INHERIT_SCHED;
#endif

  m_busy.resetValue( 0 );
  activate( flags, threadCnt, forceActive );
}

int32_t Service::svc()
{
  while ( m_run ) {
    ServiceTask * task = getQ();
    if ( task != NULL ) {
      try {
        task->initialize();
        task->doTask();
        task->finalize();
      } catch( FwkException & ex ) {
        FWKERROR( "Service: Caught exception in svc: " << ex.getMessage() );
      } catch( ... ) {
        FWKERROR( "Service: Caught exception in svc." );
      }
      m_busy--;
    }
  }
  return 0;
}

int32_t Service::runThreaded( ServiceTask * task, uint32_t threads )
{
  uint32_t avail = getIdleCount();
  if ( threads > avail ) {
    threads = avail;
  }
  task->setRunFlag( &m_run );
  putQ( task, threads );

  return threads;
}

