#include <cerrno>
#include <cassert>
#include "AliHLTHOMERLibManager.h"
#include "AliHLTHOMERReader.h"
#include "AliHLTHOMERWriter.h"
#include "AliHLTLogging.h"
#include "TString.h"
#include "TSystem.h"
ClassImp(AliHLTHOMERLibManager)
int AliHLTHOMERLibManager::fgLibraryStatus=0;
const char* AliHLTHOMERLibManager::fgkLibraries[] = {"libAliHLTHOMER.so", "libHOMER.so", NULL};
int AliHLTHOMERLibManager::fgkLibRefCount[] = {0, 0};
AliHLTHOMERLibManager::AliHLTHOMERLibManager()
:
fFctCreateReaderFromTCPPort(NULL),
fFctCreateReaderFromTCPPorts(NULL),
fFctCreateReaderFromBuffer(NULL),
fFctDeleteReader(NULL),
fFctCreateWriter(NULL),
fFctDeleteWriter(NULL),
fLoadedLib(NULL)
{
}
AliHLTHOMERLibManager::~AliHLTHOMERLibManager()
{
}
AliHLTHOMERReader* AliHLTHOMERLibManager::OpenReader(const char* hostname, unsigned short port )
{
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)
{
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) {
cout << "can not create instance of HOMER reader from port"<<endl;
}
return pReader;
}
AliHLTHOMERReader* AliHLTHOMERLibManager::OpenReaderBuffer(const AliHLTUInt8_t* pBuffer, int size)
{
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) {
}
return pReader;
}
int AliHLTHOMERLibManager::DeleteReader(AliHLTHOMERReader* pReader)
{
if (fgLibraryStatus<0) return fgLibraryStatus;
fgLibraryStatus=LoadHOMERLibrary();
if (fgLibraryStatus <= 0) {
return fgLibraryStatus;
}
if (fFctDeleteReader!=NULL) {
((AliHLTHOMERReaderDelete_t)fFctDeleteReader)(pReader);
}
return 0;
}
AliHLTHOMERWriter* AliHLTHOMERLibManager::OpenWriter()
{
if (fgLibraryStatus<0) return NULL;
fgLibraryStatus=LoadHOMERLibrary();
if (fgLibraryStatus <= 0) {
return NULL;
}
AliHLTHOMERWriter* pWriter=NULL;
if (fFctCreateWriter!=NULL && (pWriter=(((AliHLTHOMERWriterCreate_t)fFctCreateWriter)()))==NULL) {
}
return pWriter;
}
int AliHLTHOMERLibManager::DeleteWriter(AliHLTHOMERWriter* pWriter)
{
if (fgLibraryStatus<0) return fgLibraryStatus;
fgLibraryStatus=LoadHOMERLibrary();
if (fgLibraryStatus <= 0) {
return fgLibraryStatus;
}
if (fFctDeleteWriter!=NULL) {
((AliHLTHOMERWriterDelete_t)fFctDeleteWriter)(pWriter);
}
return 0;
}
int AliHLTHOMERLibManager::LoadHOMERLibrary()
{
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) {
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()
{
int iResult=0;
if (fLoadedLib != NULL)
{
const char** library=&fgkLibraries[0];
int* refcount = &fgkLibRefCount[0];
while (*library != NULL)
{
if (strcmp(*library, fLoadedLib) == 0) break;
++library;
++refcount;
}
if (*refcount >= 0) --(*refcount);
if (*refcount == 0)
{
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);
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()
));
}
}
}
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