On 07/05/2012 05:50 PM, Peter Hutterer wrote:
On Thu, Jul 05, 2012 at 02:09:13PM -0700, Chase Douglas wrote:
On 07/03/2012 10:42 PM, Peter Hutterer wrote:
On Tue, Jul 03, 2012 at 10:33:50AM -0700, Chase Douglas wrote:
On 07/02/2012 11:44 PM, Peter Hutterer wrote:
Signed-off-by: Peter Hutterer <[email protected]>
---
include/xorg/gtest/xorg-gtest-xserver.h | 13 ++++++++++++
src/environment.cpp | 31 +++-------------------------
src/xserver.cpp | 34 +++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+), 28 deletions(-)
diff --git a/include/xorg/gtest/xorg-gtest-xserver.h
b/include/xorg/gtest/xorg-gtest-xserver.h
index 52a2fd0..821b01f 100644
--- a/include/xorg/gtest/xorg-gtest-xserver.h
+++ b/include/xorg/gtest/xorg-gtest-xserver.h
@@ -53,6 +53,19 @@ class XServer : public xorg::testing::Process {
void Start(std::string &program);
/**
+ * Terminates this server process. Will signal the server to terminate
+ * multiple times before giving up.
+ *
+ * @return false if the server did not terminate, true otherwise
+ */
+ bool Terminate(void);
+
+ /**
+ * Kills the server. With a vengeance.
+ */
+ bool Kill(void);
We don't need to recreate these functions. We've already inherited
them from xorg::testing::Process. Those implementations should work
automatically if we set up the XServer class properly.
The implementation is different to the one in Process, this one does the
server-specific bits like waiting for the process to shut down and then
complaining to the log.
I read too quickly to realize the difference between the
Environment/XServer implementation and the Process implementation,
but I'm wondering if we should just move the extra stuff to the
Process implementation. Then we won't need to do any redefinition or
overriding.
I think we should keep Process basic. For most processes failing to kill it
should be an issue in itself, it's just the server that takes too long to
shut down and needs special handling.
I thought about that too. I think the question to ask is: do we think
most users or subclasses of Process are going to want wait for the
process to really die. The Process::Kill and Terminate methods just try
once to raise the signal to the child process. They return true if the
signal was sent, but don't check what happens after that. Perhaps a
better approach to resolving this issue would be to add second versions
of these methods that would take a timeout value and return true only if
the signal was successfully sent and the process died.
KillAndCheck(timeout) and TerminateAndCheck(timeout) maybe?
-- Chase
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel