@@ -89,7 +89,8 @@ auto packCallArguments(ArgsT &&... Args) {
89
89
class plugin {
90
90
public:
91
91
plugin () = delete ;
92
- plugin (RT::PiPlugin Plugin, backend UseBackend, void *LibraryHandle)
92
+ plugin (const std::shared_ptr<RT::PiPlugin> &Plugin, backend UseBackend,
93
+ void *LibraryHandle)
93
94
: MPlugin(Plugin), MBackend(UseBackend), MLibraryHandle(LibraryHandle),
94
95
TracingMutex (std::make_shared<std::mutex>()),
95
96
MPluginMutex(std::make_shared<std::mutex>()) {}
@@ -101,8 +102,11 @@ class plugin {
101
102
102
103
~plugin () = default ;
103
104
104
- const RT::PiPlugin &getPiPlugin () const { return MPlugin; }
105
- RT::PiPlugin &getPiPlugin () { return MPlugin; }
105
+ const RT::PiPlugin &getPiPlugin () const { return *MPlugin; }
106
+ RT::PiPlugin &getPiPlugin () { return *MPlugin; }
107
+ const std::shared_ptr<RT::PiPlugin> &getPiPluginPtr () const {
108
+ return MPlugin;
109
+ }
106
110
107
111
// / Checks return value from PI calls.
108
112
// /
@@ -148,29 +152,30 @@ class plugin {
148
152
uint64_t CorrelationID = pi::emitFunctionBeginTrace (PIFnName);
149
153
auto ArgsData =
150
154
packCallArguments<PiApiOffset>(std::forward<ArgsT>(Args)...);
151
- uint64_t CorrelationIDWithArgs = pi::emitFunctionWithArgsBeginTrace (
152
- static_cast <uint32_t >(PiApiOffset), PIFnName, ArgsData.data (), MPlugin);
155
+ uint64_t CorrelationIDWithArgs =
156
+ pi::emitFunctionWithArgsBeginTrace (static_cast <uint32_t >(PiApiOffset),
157
+ PIFnName, ArgsData.data (), *MPlugin);
153
158
#endif
154
159
RT::PiResult R;
155
160
if (pi::trace (pi::TraceLevel::PI_TRACE_CALLS)) {
156
161
std::lock_guard<std::mutex> Guard (*TracingMutex);
157
162
const char *FnName = PiCallInfo.getFuncName ();
158
163
std::cout << " ---> " << FnName << " (" << std::endl;
159
164
RT::printArgs (Args...);
160
- R = PiCallInfo.getFuncPtr (MPlugin)(Args...);
165
+ R = PiCallInfo.getFuncPtr (* MPlugin)(Args...);
161
166
std::cout << " ) ---> " ;
162
167
RT::printArgs (R);
163
168
RT::printOuts (Args...);
164
169
std::cout << std::endl;
165
170
} else {
166
- R = PiCallInfo.getFuncPtr (MPlugin)(Args...);
171
+ R = PiCallInfo.getFuncPtr (* MPlugin)(Args...);
167
172
}
168
173
#ifdef XPTI_ENABLE_INSTRUMENTATION
169
174
// Close the function begin with a call to function end
170
175
pi::emitFunctionEndTrace (CorrelationID, PIFnName);
171
176
pi::emitFunctionWithArgsEndTrace (CorrelationIDWithArgs,
172
177
static_cast <uint32_t >(PiApiOffset),
173
- PIFnName, ArgsData.data (), R, MPlugin);
178
+ PIFnName, ArgsData.data (), R, * MPlugin);
174
179
#endif
175
180
return R;
176
181
}
@@ -236,7 +241,7 @@ class plugin {
236
241
std::shared_ptr<std::mutex> getPluginMutex () { return MPluginMutex; }
237
242
238
243
private:
239
- RT::PiPlugin MPlugin;
244
+ std::shared_ptr< RT::PiPlugin> MPlugin;
240
245
backend MBackend;
241
246
void *MLibraryHandle; // the handle returned from dlopen
242
247
std::shared_ptr<std::mutex> TracingMutex;
0 commit comments