Skip to content

Commit 22b82a5

Browse files
Merge pull request #28 from intel-innersource/fix/process-target-crash
Fixing stale process selection crash in release
2 parents e06ab14 + f377a80 commit 22b82a5

File tree

8 files changed

+32
-4
lines changed

8 files changed

+32
-4
lines changed

IntelPresentMon/AppCef/Web/src/App.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ export default Vue.extend({
127127
async created() {
128128
Api.registerPresentmonInitFailedHandler(this.handlePresentmonInitFailed);
129129
Api.registerOverlayDiedHandler(this.handleOverlayDied);
130+
Api.registerStalePidHandler(this.handleStalePid);
130131
await Api.launchKernel();
131132
await Metrics.load();
132133
await Hotkey.refreshOptions();
@@ -178,6 +179,11 @@ export default Vue.extend({
178179
handleTargetLost(pid: number) {
179180
PrefStore.setPid(null);
180181
},
182+
handleStalePid() {
183+
PrefStore.setPid(null);
184+
Notifications.notify({text: 'Selected process has already exited.'});
185+
console.warn('selected pid was stale');
186+
},
181187
async handleHotkeyFired(action: Action) {
182188
if (action === Action.ToggleCapture) {
183189
if (this.pid !== null) {

IntelPresentMon/AppCef/Web/src/core/api.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,7 @@ export class Api {
140140
static registerTargetLostHandler(callback: (pid: number) => void) {
141141
this.core.registerSignalHandler('targetLost', callback);
142142
}
143+
static registerStalePidHandler(callback: () => void) {
144+
this.core.registerSignalHandler('stalePid', callback);
145+
}
143146
}

IntelPresentMon/AppCef/source/DataBindAccessor.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ namespace p2c::client::cef
2727
{
2828
CefPostTask(TID_RENDERER, base::BindOnce(&DBAKernelHandler::PresentmonInitFailedTask_, base::Unretained(this)));
2929
}
30+
void OnStalePidSelected() override
31+
{
32+
CefPostTask(TID_RENDERER, base::BindOnce(&DBAKernelHandler::StalePidTask_, base::Unretained(this)));
33+
}
3034
private:
3135
// functions needed for CefPostTask (which cannot handle lambdas)
3236
void TargetLostTask_(uint32_t pid_)
@@ -41,6 +45,10 @@ namespace p2c::client::cef
4145
{
4246
pSignals->SignalPresentmonInitFailed();
4347
}
48+
void StalePidTask_()
49+
{
50+
pSignals->SignalStalePid();
51+
}
4452
// data
4553
util::SignalManager* pSignals;
4654
};

IntelPresentMon/AppCef/source/util/SignalManager.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,9 @@ namespace p2c::client::util
5757
{
5858
ImplementSignal_(Keys::overlayDied());
5959
}
60+
// stalePid()
61+
void SignalManager::SignalStalePid()
62+
{
63+
ImplementSignal_(Keys::stalePid());
64+
}
6065
}

IntelPresentMon/AppCef/source/util/SignalManager.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
X_(targetLost) \
1212
X_(hotkeyFired) \
1313
X_(presentmonInitFailed) \
14-
X_(overlayDied)
14+
X_(overlayDied) \
15+
X_(stalePid)
1516

1617

1718
namespace p2c::client::util
@@ -44,6 +45,7 @@ namespace p2c::client::util
4445
void SignalHotkeyFired(uint32_t action); // hotkeyFired(action:number)
4546
void SignalPresentmonInitFailed(); // presentmonInitFailed()
4647
void SignalOverlayDied(); // overlayDied()
48+
void SignalStalePid(); // stalePid()
4749
private:
4850
// functions
4951
template<typename... Ts>

IntelPresentMon/Core/source/kernel/Kernel.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,14 @@ namespace p2c::kern
161161
}
162162
catch (const TargetLostException&)
163163
{
164-
if (pOverlayContainer)
165-
{
164+
if (pOverlayContainer) {
166165
pHandler->OnTargetLost(pOverlayContainer->GetProcess().pid);
167166
pOverlayContainer.reset();
168167
pPushedSpec.reset();
169168
}
169+
else {
170+
pHandler->OnStalePidSelected();
171+
}
170172
}
171173
catch (...)
172174
{

IntelPresentMon/Core/source/kernel/KernelHandler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ namespace p2c::kern
1313
virtual void OnTargetLost(uint32_t pid) = 0;
1414
virtual void OnOverlayDied() = 0;
1515
virtual void OnPresentmonInitFailed() = 0;
16+
virtual void OnStalePidSelected() = 0;
1617
};
1718
}

IntelPresentMon/Core/source/kernel/OverlayContainer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ namespace p2c::kern
5656
}
5757
else
5858
{
59-
p2clog.warn(L"spec-specified pid not in process map").ex(TargetLostException{}).commit();
59+
p2clog.warn(L"spec-specified pid not in process map").commit();
60+
throw TargetLostException{};
6061
}
6162
}
6263
void OverlayContainer::RebuildDocument(std::shared_ptr<OverlaySpec> pSpec_)

0 commit comments

Comments
 (0)