DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
PluginManager.cpp
Go to the documentation of this file.
1/*
2 * DUNE DAQ modification notice:
3 * This file has been modified from the original ATLAS ers source for the DUNE DAQ project.
4 * Fork baseline commit: 8267df82a4f6fe6bf02c4014923eba19eddc4614 (2020-04-14).
5 * Renamed since fork: yes (from src/PluginManager.cxx to src/PluginManager.cpp).
6 *
7 * Original copyright:
8 * Copyright (C) 2001-2020 CERN for the benefit of the ATLAS collaboration.
9 * Licensed under the Apache License, Version 2.0.
10 */
11
12#ifndef __rtems__
13#include <dlfcn.h>
14#endif
15
16#include <vector>
17
19#include <ers/internal/Util.hpp>
21
22namespace {
23const char* const SEPARATOR = ":";
24const char* const DefaultLibraryName =
25 "ers_AbortStream_ersStream:ers_ExitStream_ersStream:ers_FilterStream_ersStream:ers_GlobalLockStream_ersStream:ers_"
26 "LockStream_ersStream:ers_NullStream_ersStream:ers_RFilterStream_ersStream:ers_StandardStream_ersStream:ers_"
27 "ThrottleStream_ersStream:ers_ThrowStream_ersStream";
28const char* const EnvironmentName = "DUNEDAQ_ERS_STREAM_LIBS";
29}
30
31namespace ers {
32
34{
35#ifndef __rtems__
36 std::string library = "lib" + name + ".so";
37
38 handle_ = dlopen(library.c_str(), RTLD_LAZY | RTLD_GLOBAL);
39 char* error = dlerror();
40
41 if (!handle_) {
43 }
44#endif
45}
46
48{
50 // Library should be unloaded, but with some compilers (e.g gcc323)
51 // this results in crash of program, because it is not recognized
52 // that the library is still in use
54
55 // dlclose( handle_ );
56}
57
59{
60 LibMap::iterator it = libraries_.begin();
61 for (; it != libraries_.end();) {
62 delete it->second;
63 libraries_.erase(it++);
64 }
65}
66
68{
69 const char* env = ::getenv(EnvironmentName);
70 std::string config(env ? std::string(env) + SEPARATOR + DefaultLibraryName : DefaultLibraryName);
71
72 std::vector<std::string> libs;
73 ers::tokenize(config, SEPARATOR, libs);
74
75 for (size_t i = 0; i < libs.size(); i++) {
76 LibMap::iterator it = libraries_.find(libs[i]);
77 if (it == libraries_.end()) {
78 try {
79 libraries_[libs[i]] = new SharedLibrary(libs[i]);
80 } catch (PluginException& ex) {
81 ERS_INTERNAL_ERROR("Library " << libs[i] << " can not be loaded because " << ex.reason())
82 }
83 }
84 }
85}
86}
PluginException(const std::string &reason)
const std::string & reason() const
SharedLibrary(const std::string &name)
#define ERS_INTERNAL_ERROR(message)
Definition macro.hpp:71
void tokenize(const std::string &text, const std::string &separators, std::vector< std::string > &tokens)
Definition Util.cpp:18
void error(const Issue &issue)
Definition ers.hpp:101