ROOT logo
// $Id$

/**************************************************************************
 * This file is property of and copyright by the ALICE HLT Project        * 
 * ALICE Experiment at CERN, All rights reserved.                         *
 *                                                                        *
 * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
 *                  for The ALICE HLT Project.                            *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/// @file   AliHLTHOMERLibManager.cxx
/// @author Matthias Richter
/// @date   
/// @brief  dynamic HLT HOMER reader/writer generation and destruction.

#include <cerrno>
#include <cassert>
#include "AliHLTHOMERLibManager.h"
#include "AliHLTHOMERReader.h"
#include "AliHLTHOMERWriter.h"
#include "AliHLTLogging.h"
#include "TString.h"
#include "TSystem.h"

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTHOMERLibManager)

// global flag of the library status
int AliHLTHOMERLibManager::fgLibraryStatus=0;
// This list must be NULL terminated, since we use it as a marker to identify
// the end of the list.
const char* AliHLTHOMERLibManager::fgkLibraries[] = {"libAliHLTHOMER.so", "libHOMER.so", NULL};
// The size of the list of reference counts must be one less than fgkLibraries.
int AliHLTHOMERLibManager::fgkLibRefCount[] = {0, 0};

AliHLTHOMERLibManager::AliHLTHOMERLibManager()
  :
  fFctCreateReaderFromTCPPort(NULL),
  fFctCreateReaderFromTCPPorts(NULL),
  fFctCreateReaderFromBuffer(NULL),
  fFctDeleteReader(NULL),
  fFctCreateWriter(NULL),
  fFctDeleteWriter(NULL),
  fLoadedLib(NULL)
{
  // constructor
  // 
  // Interface to the HLT Online Monitoring Including Root (HOMER) library.
  // It allows to decouple the HLT base library from this additional library
  // while providing the basic functionality to the component libraries
}

AliHLTHOMERLibManager::~AliHLTHOMERLibManager()
{
  // destructor
  //
  // the library load strategy has been changed in March 2013 in order to
  // stabilize the runtime memory layout of AliRoot in an attemp to get control
  // over memory corruptions
  //  UnloadHOMERLibrary();
}

AliHLTHOMERReader* AliHLTHOMERLibManager::OpenReader(const char* hostname, unsigned short port )
{
  // Open Reader instance for host
  if (fgLibraryStatus<0) return NULL;

  fgLibraryStatus=LoadHOMERLibrary();
  if (fgLibraryStatus <= 0) {
	return NULL;
  }
  
  AliHLTHOMERReader* pReader=NULL;
  if (fFctCreateReaderFromTCPPort!=NULL && (pReader=(((AliHLTHOMERReaderCreateFromTCPPort_t)fFctCreateReaderFromTCPPort)(hostname, port)))==NULL) {
    cout <<"can not create instance of HOMER reader from ports" << endl;
  }
  
  return pReader;
}

AliHLTHOMERReader* AliHLTHOMERLibManager::OpenReader(unsigned int tcpCnt, const char** hostnames, unsigned short* ports)
{
  // Open Reader instance for a list of hosts
  if (fgLibraryStatus<0) return NULL;

  fgLibraryStatus=LoadHOMERLibrary();
  if (fgLibraryStatus <= 0) {
  	return NULL;
  }
  
  AliHLTHOMERReader* pReader=NULL;
  if (fFctCreateReaderFromTCPPorts!=NULL && (pReader=(((AliHLTHOMERReaderCreateFromTCPPorts_t)fFctCreateReaderFromTCPPorts)(tcpCnt, hostnames, ports)))==NULL) {
    //HLTError("can not create instance of HOMER reader (function %p)", fFctCreateReaderFromTCPPorts);
    cout << "can not create instance of HOMER reader from port"<<endl;
  }
  
  return pReader;
}

AliHLTHOMERReader* AliHLTHOMERLibManager::OpenReaderBuffer(const AliHLTUInt8_t* pBuffer, int size)
{
  // Open Reader instance for a data buffer
  if (fgLibraryStatus<0) return NULL;

  fgLibraryStatus=LoadHOMERLibrary();
  if (fgLibraryStatus <= 0) {
	return NULL;
  }
  
  AliHLTHOMERReader* pReader=NULL;
  if (fFctCreateReaderFromBuffer!=NULL && (pReader=(((AliHLTHOMERReaderCreateFromBuffer_t)fFctCreateReaderFromBuffer)(pBuffer, size)))==NULL) {
    //HLTError("can not create instance of HOMER reader (function %p)", fFctCreateReaderFromBuffer);
  }
  
  return pReader;
}

int AliHLTHOMERLibManager::DeleteReader(AliHLTHOMERReader* pReader)
{
  // delete a reader

  // the actual deletion function is inside the HOMER library
  if (fgLibraryStatus<0) return fgLibraryStatus;

  fgLibraryStatus=LoadHOMERLibrary();
  if (fgLibraryStatus <= 0) {
  	return fgLibraryStatus;
  }
  
  if (fFctDeleteReader!=NULL) {
    ((AliHLTHOMERReaderDelete_t)fFctDeleteReader)(pReader);
  }
  
  return 0;
}

AliHLTHOMERWriter* AliHLTHOMERLibManager::OpenWriter()
{
  // open a Writer instance
  if (fgLibraryStatus<0) return NULL;

  fgLibraryStatus=LoadHOMERLibrary();
  if (fgLibraryStatus <= 0) {
	return NULL;
  }
  
  AliHLTHOMERWriter* pWriter=NULL;
  if (fFctCreateWriter!=NULL && (pWriter=(((AliHLTHOMERWriterCreate_t)fFctCreateWriter)()))==NULL) {
//     HLTError("can not create instance of HOMER writer (function %p)", fFctCreateWriter);
  }
  
  return pWriter;
}

int AliHLTHOMERLibManager::DeleteWriter(AliHLTHOMERWriter* pWriter)
{
  // see header file for class documentation
  if (fgLibraryStatus<0) return fgLibraryStatus;

  fgLibraryStatus=LoadHOMERLibrary();
  if (fgLibraryStatus <= 0) {
	return fgLibraryStatus;
  }
  
  if (fFctDeleteWriter!=NULL) {
    ((AliHLTHOMERWriterDelete_t)fFctDeleteWriter)(pWriter);
  }
  
  return 0;
}

int AliHLTHOMERLibManager::LoadHOMERLibrary()
{
  // delete a writer

  // the actual deletion function is inside the HOMER library
  int iResult=-EBADF;
  const char** library=&fgkLibraries[0];
  int* refcount = &fgkLibRefCount[0];
  do {
    TString libs = gSystem->GetLibraries();
    if (libs.Contains(*library) ||
	(gSystem->Load(*library)) >= 0) {
      ++(*refcount);
      fLoadedLib = *library;
      iResult=1;
      break;
    }
    ++library;
    ++refcount;
  } while ((*library)!=NULL);

  if (iResult>0 && *library!=NULL) {
    // print compile info
    typedef void (*CompileInfo)( char*& date, char*& time);

    fFctCreateReaderFromTCPPort=(void (*)())gSystem->DynFindSymbol(*library, ALIHLTHOMERREADER_CREATE_FROM_TCPPORT);
    fFctCreateReaderFromTCPPorts=(void (*)())gSystem->DynFindSymbol(*library, ALIHLTHOMERREADER_CREATE_FROM_TCPPORTS);
    fFctCreateReaderFromBuffer=(void (*)())gSystem->DynFindSymbol(*library, ALIHLTHOMERREADER_CREATE_FROM_BUFFER);
    fFctDeleteReader=(void (*)())gSystem->DynFindSymbol(*library, ALIHLTHOMERREADER_DELETE);
    fFctCreateWriter=(void (*)())gSystem->DynFindSymbol(*library, ALIHLTHOMERWRITER_CREATE);
    fFctDeleteWriter=(void (*)())gSystem->DynFindSymbol(*library, ALIHLTHOMERWRITER_DELETE);
    if (fFctCreateReaderFromTCPPort==NULL ||
	fFctCreateReaderFromTCPPorts==NULL ||
	fFctCreateReaderFromBuffer==NULL || 
	fFctDeleteReader==NULL ||
	fFctCreateWriter==NULL ||
	fFctDeleteWriter==NULL) {
      iResult=-ENOSYS;
    } else {
    }
  }
  if (iResult<0 || *library==NULL) {
    fFctCreateReaderFromTCPPort=NULL;
    fFctCreateReaderFromTCPPorts=NULL;
    fFctCreateReaderFromBuffer=NULL;
    fFctDeleteReader=NULL;
    fFctCreateWriter=NULL;
    fFctDeleteWriter=NULL;
  }

  return iResult;
}

int AliHLTHOMERLibManager::UnloadHOMERLibrary()
{
  // unload HOMER library
  int iResult=0;
  
  if (fLoadedLib != NULL)
  {
    // Find the corresponding reference count.
    const char** library=&fgkLibraries[0];
    int* refcount = &fgkLibRefCount[0];
    while (*library != NULL)
    {
      if (strcmp(*library, fLoadedLib) == 0) break;
      ++library;
      ++refcount;
    }
    
    // Decrease the reference count and remove the library if it is zero.
    if (*refcount >= 0) --(*refcount);
    if (*refcount == 0)
    {
      // Check that the library we are trying to unload is actually the last library
      // in the gSystem->GetLibraries() list. If not then we must abort the removal.
      // This is because of a ROOT bug/feature/limitation. If we try unload the library
      // then ROOT will also wipe all libraries in the gSystem->GetLibraries() list
      // following the library we want to unload.
      TString libstring = gSystem->GetLibraries();
      TString token, lastlib;
      Ssiz_t from = 0;
      Int_t numOfLibs = 0, posOfLib = -1;
      while (libstring.Tokenize(token, from, " "))
      {
        ++numOfLibs;
        lastlib = token;
        if (token.Contains(fLoadedLib)) posOfLib = numOfLibs;
      }
      if (numOfLibs == posOfLib)
      {
        gSystem->Unload(fLoadedLib);

        // Check that the library is gone, since Unload() does not return a status code.
        libstring = gSystem->GetLibraries();
        if (libstring.Contains(fLoadedLib)) iResult = -EBADF;
      }
      else
      {
        AliHLTLogging log;
        log.LoggingVarargs(kHLTLogWarning, Class_Name(), FUNCTIONNAME(), __FILE__, __LINE__,
          Form("ROOT limitation! Cannot properly cleanup and unload the shared"
            " library '%s' since another library '%s' was loaded afterwards. Trying to"
            " unload this library will remove the others and lead to serious memory faults.",
            fLoadedLib, lastlib.Data()
        ));
      }
    }
  }

  // Clear the function pointers.
  fFctCreateReaderFromTCPPort = NULL;
  fFctCreateReaderFromTCPPorts = NULL;
  fFctCreateReaderFromBuffer = NULL;
  fFctDeleteReader = NULL;
  fFctCreateWriter = NULL;
  fFctDeleteWriter = NULL;

  return iResult;
}
 AliHLTHOMERLibManager.cxx:1
 AliHLTHOMERLibManager.cxx:2
 AliHLTHOMERLibManager.cxx:3
 AliHLTHOMERLibManager.cxx:4
 AliHLTHOMERLibManager.cxx:5
 AliHLTHOMERLibManager.cxx:6
 AliHLTHOMERLibManager.cxx:7
 AliHLTHOMERLibManager.cxx:8
 AliHLTHOMERLibManager.cxx:9
 AliHLTHOMERLibManager.cxx:10
 AliHLTHOMERLibManager.cxx:11
 AliHLTHOMERLibManager.cxx:12
 AliHLTHOMERLibManager.cxx:13
 AliHLTHOMERLibManager.cxx:14
 AliHLTHOMERLibManager.cxx:15
 AliHLTHOMERLibManager.cxx:16
 AliHLTHOMERLibManager.cxx:17
 AliHLTHOMERLibManager.cxx:18
 AliHLTHOMERLibManager.cxx:19
 AliHLTHOMERLibManager.cxx:20
 AliHLTHOMERLibManager.cxx:21
 AliHLTHOMERLibManager.cxx:22
 AliHLTHOMERLibManager.cxx:23
 AliHLTHOMERLibManager.cxx:24
 AliHLTHOMERLibManager.cxx:25
 AliHLTHOMERLibManager.cxx:26
 AliHLTHOMERLibManager.cxx:27
 AliHLTHOMERLibManager.cxx:28
 AliHLTHOMERLibManager.cxx:29
 AliHLTHOMERLibManager.cxx:30
 AliHLTHOMERLibManager.cxx:31
 AliHLTHOMERLibManager.cxx:32
 AliHLTHOMERLibManager.cxx:33
 AliHLTHOMERLibManager.cxx:34
 AliHLTHOMERLibManager.cxx:35
 AliHLTHOMERLibManager.cxx:36
 AliHLTHOMERLibManager.cxx:37
 AliHLTHOMERLibManager.cxx:38
 AliHLTHOMERLibManager.cxx:39
 AliHLTHOMERLibManager.cxx:40
 AliHLTHOMERLibManager.cxx:41
 AliHLTHOMERLibManager.cxx:42
 AliHLTHOMERLibManager.cxx:43
 AliHLTHOMERLibManager.cxx:44
 AliHLTHOMERLibManager.cxx:45
 AliHLTHOMERLibManager.cxx:46
 AliHLTHOMERLibManager.cxx:47
 AliHLTHOMERLibManager.cxx:48
 AliHLTHOMERLibManager.cxx:49
 AliHLTHOMERLibManager.cxx:50
 AliHLTHOMERLibManager.cxx:51
 AliHLTHOMERLibManager.cxx:52
 AliHLTHOMERLibManager.cxx:53
 AliHLTHOMERLibManager.cxx:54
 AliHLTHOMERLibManager.cxx:55
 AliHLTHOMERLibManager.cxx:56
 AliHLTHOMERLibManager.cxx:57
 AliHLTHOMERLibManager.cxx:58
 AliHLTHOMERLibManager.cxx:59
 AliHLTHOMERLibManager.cxx:60
 AliHLTHOMERLibManager.cxx:61
 AliHLTHOMERLibManager.cxx:62
 AliHLTHOMERLibManager.cxx:63
 AliHLTHOMERLibManager.cxx:64
 AliHLTHOMERLibManager.cxx:65
 AliHLTHOMERLibManager.cxx:66
 AliHLTHOMERLibManager.cxx:67
 AliHLTHOMERLibManager.cxx:68
 AliHLTHOMERLibManager.cxx:69
 AliHLTHOMERLibManager.cxx:70
 AliHLTHOMERLibManager.cxx:71
 AliHLTHOMERLibManager.cxx:72
 AliHLTHOMERLibManager.cxx:73
 AliHLTHOMERLibManager.cxx:74
 AliHLTHOMERLibManager.cxx:75
 AliHLTHOMERLibManager.cxx:76
 AliHLTHOMERLibManager.cxx:77
 AliHLTHOMERLibManager.cxx:78
 AliHLTHOMERLibManager.cxx:79
 AliHLTHOMERLibManager.cxx:80
 AliHLTHOMERLibManager.cxx:81
 AliHLTHOMERLibManager.cxx:82
 AliHLTHOMERLibManager.cxx:83
 AliHLTHOMERLibManager.cxx:84
 AliHLTHOMERLibManager.cxx:85
 AliHLTHOMERLibManager.cxx:86
 AliHLTHOMERLibManager.cxx:87
 AliHLTHOMERLibManager.cxx:88
 AliHLTHOMERLibManager.cxx:89
 AliHLTHOMERLibManager.cxx:90
 AliHLTHOMERLibManager.cxx:91
 AliHLTHOMERLibManager.cxx:92
 AliHLTHOMERLibManager.cxx:93
 AliHLTHOMERLibManager.cxx:94
 AliHLTHOMERLibManager.cxx:95
 AliHLTHOMERLibManager.cxx:96
 AliHLTHOMERLibManager.cxx:97
 AliHLTHOMERLibManager.cxx:98
 AliHLTHOMERLibManager.cxx:99
 AliHLTHOMERLibManager.cxx:100
 AliHLTHOMERLibManager.cxx:101
 AliHLTHOMERLibManager.cxx:102
 AliHLTHOMERLibManager.cxx:103
 AliHLTHOMERLibManager.cxx:104
 AliHLTHOMERLibManager.cxx:105
 AliHLTHOMERLibManager.cxx:106
 AliHLTHOMERLibManager.cxx:107
 AliHLTHOMERLibManager.cxx:108
 AliHLTHOMERLibManager.cxx:109
 AliHLTHOMERLibManager.cxx:110
 AliHLTHOMERLibManager.cxx:111
 AliHLTHOMERLibManager.cxx:112
 AliHLTHOMERLibManager.cxx:113
 AliHLTHOMERLibManager.cxx:114
 AliHLTHOMERLibManager.cxx:115
 AliHLTHOMERLibManager.cxx:116
 AliHLTHOMERLibManager.cxx:117
 AliHLTHOMERLibManager.cxx:118
 AliHLTHOMERLibManager.cxx:119
 AliHLTHOMERLibManager.cxx:120
 AliHLTHOMERLibManager.cxx:121
 AliHLTHOMERLibManager.cxx:122
 AliHLTHOMERLibManager.cxx:123
 AliHLTHOMERLibManager.cxx:124
 AliHLTHOMERLibManager.cxx:125
 AliHLTHOMERLibManager.cxx:126
 AliHLTHOMERLibManager.cxx:127
 AliHLTHOMERLibManager.cxx:128
 AliHLTHOMERLibManager.cxx:129
 AliHLTHOMERLibManager.cxx:130
 AliHLTHOMERLibManager.cxx:131
 AliHLTHOMERLibManager.cxx:132
 AliHLTHOMERLibManager.cxx:133
 AliHLTHOMERLibManager.cxx:134
 AliHLTHOMERLibManager.cxx:135
 AliHLTHOMERLibManager.cxx:136
 AliHLTHOMERLibManager.cxx:137
 AliHLTHOMERLibManager.cxx:138
 AliHLTHOMERLibManager.cxx:139
 AliHLTHOMERLibManager.cxx:140
 AliHLTHOMERLibManager.cxx:141
 AliHLTHOMERLibManager.cxx:142
 AliHLTHOMERLibManager.cxx:143
 AliHLTHOMERLibManager.cxx:144
 AliHLTHOMERLibManager.cxx:145
 AliHLTHOMERLibManager.cxx:146
 AliHLTHOMERLibManager.cxx:147
 AliHLTHOMERLibManager.cxx:148
 AliHLTHOMERLibManager.cxx:149
 AliHLTHOMERLibManager.cxx:150
 AliHLTHOMERLibManager.cxx:151
 AliHLTHOMERLibManager.cxx:152
 AliHLTHOMERLibManager.cxx:153
 AliHLTHOMERLibManager.cxx:154
 AliHLTHOMERLibManager.cxx:155
 AliHLTHOMERLibManager.cxx:156
 AliHLTHOMERLibManager.cxx:157
 AliHLTHOMERLibManager.cxx:158
 AliHLTHOMERLibManager.cxx:159
 AliHLTHOMERLibManager.cxx:160
 AliHLTHOMERLibManager.cxx:161
 AliHLTHOMERLibManager.cxx:162
 AliHLTHOMERLibManager.cxx:163
 AliHLTHOMERLibManager.cxx:164
 AliHLTHOMERLibManager.cxx:165
 AliHLTHOMERLibManager.cxx:166
 AliHLTHOMERLibManager.cxx:167
 AliHLTHOMERLibManager.cxx:168
 AliHLTHOMERLibManager.cxx:169
 AliHLTHOMERLibManager.cxx:170
 AliHLTHOMERLibManager.cxx:171
 AliHLTHOMERLibManager.cxx:172
 AliHLTHOMERLibManager.cxx:173
 AliHLTHOMERLibManager.cxx:174
 AliHLTHOMERLibManager.cxx:175
 AliHLTHOMERLibManager.cxx:176
 AliHLTHOMERLibManager.cxx:177
 AliHLTHOMERLibManager.cxx:178
 AliHLTHOMERLibManager.cxx:179
 AliHLTHOMERLibManager.cxx:180
 AliHLTHOMERLibManager.cxx:181
 AliHLTHOMERLibManager.cxx:182
 AliHLTHOMERLibManager.cxx:183
 AliHLTHOMERLibManager.cxx:184
 AliHLTHOMERLibManager.cxx:185
 AliHLTHOMERLibManager.cxx:186
 AliHLTHOMERLibManager.cxx:187
 AliHLTHOMERLibManager.cxx:188
 AliHLTHOMERLibManager.cxx:189
 AliHLTHOMERLibManager.cxx:190
 AliHLTHOMERLibManager.cxx:191
 AliHLTHOMERLibManager.cxx:192
 AliHLTHOMERLibManager.cxx:193
 AliHLTHOMERLibManager.cxx:194
 AliHLTHOMERLibManager.cxx:195
 AliHLTHOMERLibManager.cxx:196
 AliHLTHOMERLibManager.cxx:197
 AliHLTHOMERLibManager.cxx:198
 AliHLTHOMERLibManager.cxx:199
 AliHLTHOMERLibManager.cxx:200
 AliHLTHOMERLibManager.cxx:201
 AliHLTHOMERLibManager.cxx:202
 AliHLTHOMERLibManager.cxx:203
 AliHLTHOMERLibManager.cxx:204
 AliHLTHOMERLibManager.cxx:205
 AliHLTHOMERLibManager.cxx:206
 AliHLTHOMERLibManager.cxx:207
 AliHLTHOMERLibManager.cxx:208
 AliHLTHOMERLibManager.cxx:209
 AliHLTHOMERLibManager.cxx:210
 AliHLTHOMERLibManager.cxx:211
 AliHLTHOMERLibManager.cxx:212
 AliHLTHOMERLibManager.cxx:213
 AliHLTHOMERLibManager.cxx:214
 AliHLTHOMERLibManager.cxx:215
 AliHLTHOMERLibManager.cxx:216
 AliHLTHOMERLibManager.cxx:217
 AliHLTHOMERLibManager.cxx:218
 AliHLTHOMERLibManager.cxx:219
 AliHLTHOMERLibManager.cxx:220
 AliHLTHOMERLibManager.cxx:221
 AliHLTHOMERLibManager.cxx:222
 AliHLTHOMERLibManager.cxx:223
 AliHLTHOMERLibManager.cxx:224
 AliHLTHOMERLibManager.cxx:225
 AliHLTHOMERLibManager.cxx:226
 AliHLTHOMERLibManager.cxx:227
 AliHLTHOMERLibManager.cxx:228
 AliHLTHOMERLibManager.cxx:229
 AliHLTHOMERLibManager.cxx:230
 AliHLTHOMERLibManager.cxx:231
 AliHLTHOMERLibManager.cxx:232
 AliHLTHOMERLibManager.cxx:233
 AliHLTHOMERLibManager.cxx:234
 AliHLTHOMERLibManager.cxx:235
 AliHLTHOMERLibManager.cxx:236
 AliHLTHOMERLibManager.cxx:237
 AliHLTHOMERLibManager.cxx:238
 AliHLTHOMERLibManager.cxx:239
 AliHLTHOMERLibManager.cxx:240
 AliHLTHOMERLibManager.cxx:241
 AliHLTHOMERLibManager.cxx:242
 AliHLTHOMERLibManager.cxx:243
 AliHLTHOMERLibManager.cxx:244
 AliHLTHOMERLibManager.cxx:245
 AliHLTHOMERLibManager.cxx:246
 AliHLTHOMERLibManager.cxx:247
 AliHLTHOMERLibManager.cxx:248
 AliHLTHOMERLibManager.cxx:249
 AliHLTHOMERLibManager.cxx:250
 AliHLTHOMERLibManager.cxx:251
 AliHLTHOMERLibManager.cxx:252
 AliHLTHOMERLibManager.cxx:253
 AliHLTHOMERLibManager.cxx:254
 AliHLTHOMERLibManager.cxx:255
 AliHLTHOMERLibManager.cxx:256
 AliHLTHOMERLibManager.cxx:257
 AliHLTHOMERLibManager.cxx:258
 AliHLTHOMERLibManager.cxx:259
 AliHLTHOMERLibManager.cxx:260
 AliHLTHOMERLibManager.cxx:261
 AliHLTHOMERLibManager.cxx:262
 AliHLTHOMERLibManager.cxx:263
 AliHLTHOMERLibManager.cxx:264
 AliHLTHOMERLibManager.cxx:265
 AliHLTHOMERLibManager.cxx:266
 AliHLTHOMERLibManager.cxx:267
 AliHLTHOMERLibManager.cxx:268
 AliHLTHOMERLibManager.cxx:269
 AliHLTHOMERLibManager.cxx:270
 AliHLTHOMERLibManager.cxx:271
 AliHLTHOMERLibManager.cxx:272
 AliHLTHOMERLibManager.cxx:273
 AliHLTHOMERLibManager.cxx:274
 AliHLTHOMERLibManager.cxx:275
 AliHLTHOMERLibManager.cxx:276
 AliHLTHOMERLibManager.cxx:277
 AliHLTHOMERLibManager.cxx:278
 AliHLTHOMERLibManager.cxx:279
 AliHLTHOMERLibManager.cxx:280
 AliHLTHOMERLibManager.cxx:281
 AliHLTHOMERLibManager.cxx:282
 AliHLTHOMERLibManager.cxx:283
 AliHLTHOMERLibManager.cxx:284
 AliHLTHOMERLibManager.cxx:285
 AliHLTHOMERLibManager.cxx:286
 AliHLTHOMERLibManager.cxx:287
 AliHLTHOMERLibManager.cxx:288
 AliHLTHOMERLibManager.cxx:289
 AliHLTHOMERLibManager.cxx:290
 AliHLTHOMERLibManager.cxx:291
 AliHLTHOMERLibManager.cxx:292
 AliHLTHOMERLibManager.cxx:293
 AliHLTHOMERLibManager.cxx:294
 AliHLTHOMERLibManager.cxx:295
 AliHLTHOMERLibManager.cxx:296
 AliHLTHOMERLibManager.cxx:297
 AliHLTHOMERLibManager.cxx:298
 AliHLTHOMERLibManager.cxx:299