static void
checkThreads (float limit_percent)
{
  int nThreads;

  nThreads = getNumberOfThreads ();

  if (nThreads > getMaxThreads () * limit_percent ) {
    throw KurentoException (NOT_ENOUGH_RESOURCES, "Too many threads");
  }
}
void
checkResources (void)
{
  int nThreads;

  nThreads = getNumberOfThreads ();

  if (nThreads > maxThreads) {
    throw KurentoException (NOT_ENOUGH_RESOURCES, "Too many threads");
  }
}
Exemplo n.º 3
0
static void
checkThreads (float limit_percent)
{
  const rlim_t maxThreads = getMaxThreads ();
  if (maxThreads <= 0 || maxThreads == RLIM_INFINITY) {
    return;
  }

  const rlim_t maxThreadsKms = (rlim_t)(maxThreads * limit_percent);
  const rlim_t nThreads = (rlim_t)getNumberOfThreads ();

  if (nThreads > maxThreadsKms) {
    std::ostringstream oss;
    oss << "Reached KMS threads limit: " << maxThreadsKms;
    std::string exMessage = oss.str();

    oss << " (system max: " << maxThreads << ");"
        << " set a higher limit with `ulimit -Su`, or in the KMS service settings (/etc/default/kurento-media-server)";
    std::string logMessage = oss.str();

    GST_WARNING ("%s", logMessage.c_str());
    throw KurentoException (NOT_ENOUGH_RESOURCES, exMessage);
  }
}
Exemplo n.º 4
0
	/**
	 * handle message
	 *
	 * return true if the resources were changed
	 */
	bool msg_recv_message_innerloop()
	{
		switch(sPMOMessage->package_type)
		{
			case SPMOMessage::SERVER_QUIT:
//				std::cout << this_pid << ": Processing message type SERVER_QUIT" << std::endl;
				std::cerr << "QUIT requested from server" << std::endl;
				exit(-1);
				return false;

			case SPMOMessage::CLIENT_ACK_SHUTDOWN:
//				std::cout << this_pid << ": Processing message type CLIENT_ACK_SHUTDOWN" << std::endl;
				if (sPMOMessage->data.ack_quit.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.ack_quit.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.ack_quit.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.ack_quit.seq_id;

				// update client shutdown hint
				std::cout << "SUM CLIENT SHUTDOWN HINT: " << sPMOMessage->data.ack_quit.client_shutdown_hint << std::endl;
				std::cout << "SUM CLIENT SHUTDOWN HINT DIV TIME: " << sPMOMessage->data.ack_quit.client_shutdown_hint_div_time << std::endl;
				return false;

			case SPMOMessage::SERVER_INVADE_ANSWER:
//				std::cout << this_pid << ": Processing message type SERVER_INVADE_ANSWER" << std::endl;
				if (sPMOMessage->data.invade_answer.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.invade_answer.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.invade_answer.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.invade_answer.seq_id;

				return handleInvadeAnswer();

			case SPMOMessage::SERVER_REINVADE_NONBLOCKING:
//				std::cout << this_pid << ": Processing message type SERVER_REINVADE_NONBLOCKING" << std::endl;
				if (sPMOMessage->data.invade.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.invade.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.invade.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.invade_answer.seq_id;

				if (retreat_in_progress)
					return false;

				return handleReinvadeNonblocking();

			case SPMOMessage::SERVER_ACK:
//				std::cout << this_pid << ": Processing message type SERVER_ACK" << std::endl;
				if (sPMOMessage->data.ack.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.ack.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.ack.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.ack.seq_id;

				if (getNumberOfThreads() == 0)
					setNumberOfThreads(1);

				return false;

			default:
				std::cerr << "UNKNOWN MESSAGE TYPE " << sPMOMessage->package_type << std::endl;
				assert(false);
				exit(-1);
				return false;
		}
	}
Exemplo n.º 5
0
ossim_int32 ossimImageUtil::execute()
{
   static const char M[] = "ossimImageUtil::execute()";
   
   if ( traceDebug() )
   {
      ossimNotify(ossimNotifyLevel_DEBUG) << M << " entered...\n";
   }

   if ( getDumpFilterImagesFlag() )
   {
      // Caller wants to see filtered image names:
      if ( m_filteredImages.empty() )
      {
         initializeDefaultFilterList();
      }
      
      dumpFilteredImageList();
   }

   if ( !m_fileWalker )
   {
      m_fileWalker = new ossimFileWalker();
   }
   
   // Get the number of "file*" keywords.
   ossim_uint32 fileCount = m_kwl->numberOf("file");

   if ( fileCount )
   {
      if ( !getOverrideFilteredImagesFlag() && m_filteredImages.empty() )
      {
         initializeDefaultFilterList();
      }
      
      m_fileWalker->initializeDefaultFilterList();
      
      m_fileWalker->setNumberOfThreads( getNumberOfThreads() );

      // Must set this so we can stop recursion on directory based images.
      m_fileWalker->setWaitOnDirFlag( true );

      // This links the file walker back to our "processFile" method.
      m_fileWalker->setFileProcessor( this );
      
      // Wrap in try catch block as excptions can be thrown under the hood.
      try
      {
         // Get the list of files passed to us:
         std::vector<ossimFilename> files;
         ossim_uint32 processedFiles = 0;;
         ossim_uint32 i = 0;
         while ( processedFiles < fileCount )
         {
            ossimString kw = FILE_KW;
            kw += ossimString::toString(i);
            std::string lookup = m_kwl->findKey( kw.string() );
            if ( lookup.size() )
            {
               files.push_back( ossimFilename(lookup) );
               ++processedFiles;
            }
            
            ++i;
            if ( i > (fileCount + 100) ) break;
         }

         // Process the files:
         m_fileWalker->walk( files ); 
      }
      catch (const ossimException& e)
      {
         ossimNotify(ossimNotifyLevel_WARN)
            << "Caught exception: " << e.what() << endl;
         setErrorStatus( ossimErrorCodes::OSSIM_ERROR );
      }
      
   } // if ( fileCount )

   if ( traceDebug() )
   {
      ossimNotify(ossimNotifyLevel_DEBUG)
         << M << " exit status: " << m_errorStatus << std::endl;
   }
   
   // Zero is good, non zero is bad.
   return m_errorStatus; 
}