Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
LimaGroup
Lima-camera-eiger
Commits
0bec8857
Commit
0bec8857
authored
Feb 12, 2020
by
Alejandro Homs Puron
Browse files
Avoid dead-locks during Abort
parent
9df79ec2
Changes
2
Show whitespace changes
Inline
Side-by-side
include/EigerCamera.h
View file @
0bec8857
...
...
@@ -174,7 +174,6 @@ class LIBEIGER Camera : public HwMaxImageSizeCallbackGen, public EventCallbackGe
void
_synchronize
();
/// Used during plug-in initialization
void
_trigger_finished
(
bool
);
void
_initialization_finished
(
bool
ok
);
void
_disarm
();
void
_updateImageSize
();
...
...
src/EigerCamera.cpp
View file @
0bec8857
...
...
@@ -253,11 +253,11 @@ void Camera::startAcq()
if
((
m_trig_mode
==
IntTrig
)
||
(
m_trig_mode
==
IntTrigMult
))
{
bool
disarm_at_end
=
(
m_frames_triggered
+
m_nb_triggers
==
m_nb_frames
);
DEB_TRACE
()
<<
"Trigger start: "
<<
DEB_VAR1
(
disarm_at_end
);
CommandReq
trigger
=
m_requests
->
get_command
(
Requests
::
TRIGGER
);
m_trigger_state
=
RUNNING
;
m_frames_triggered
+=
m_nb_triggers
;
bool
disarm_at_end
=
(
m_frames_triggered
==
m_nb_frames
);
DEB_TRACE
()
<<
"Trigger start: "
<<
DEB_VAR1
(
disarm_at_end
);
AutoMutexUnlock
u
(
lock
);
CallbackPtr
cbk
(
new
TriggerCallback
(
*
this
));
...
...
@@ -280,6 +280,7 @@ void Camera::stopAcq()
// Ongoing Trigger callback might run, avoid Disarm and potential deadlock
m_armed
=
false
;
lock
.
unlock
();
DEB_TRACE
()
<<
"Aborting"
;
sendCommand
(
Requests
::
ABORT
);
}
...
...
@@ -739,7 +740,8 @@ void Camera::_trigger_finished(bool ok)
if
(
!
ok
)
{
DEB_ERROR
()
<<
"Error in trigger command"
;
}
else
if
(
m_frames_triggered
==
m_nb_frames
)
{
try
{
_disarm
();
}
AutoMutexUnlock
u
(
lock
);
try
{
disarm
();
}
catch
(...)
{
ok
=
false
;
}
}
...
...
@@ -1143,18 +1145,13 @@ void Camera::disarm()
{
DEB_MEMBER_FUNCT
();
AutoMutex
lock
(
m_cond
.
mutex
());
_disarm
();
}
if
(
!
m_armed
)
return
;
void
Camera
::
_disarm
()
{
DEB_MEMBER_FUNCT
();
DEB_PARAM
()
<<
DEB_VAR1
(
m_armed
);
if
(
m_armed
)
{
m_armed
=
false
;
lock
.
unlock
();
DEB_TRACE
()
<<
"Disarming"
;
sendCommand
(
Requests
::
DISARM
);
m_armed
=
false
;
}
}
const
std
::
string
&
Camera
::
getDetectorIp
()
const
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment