mirror of
https://gitdl.cn/https://github.com/chakralinux/core.git
synced 2025-02-07 02:57:16 +08:00
101 lines
2.9 KiB
Diff
101 lines
2.9 KiB
Diff
commit 858927c9d650697e8bd74697b8815c17cc93402d
|
|
Author: Oswald Buddenhagen <ossi@kde.org>
|
|
Date: Sun May 15 12:19:32 2011 +0200
|
|
|
|
use monotonic clock if available
|
|
|
|
this avoids that clock jumps (e.g., ntp syncs) cause timeouts.
|
|
fixes bug 269522
|
|
|
|
diff --git a/kdm/backend/CMakeLists.txt b/kdm/backend/CMakeLists.txt
|
|
index 0fbf35e..e94a3b9 100644
|
|
--- a/kdm/backend/CMakeLists.txt
|
|
+++ b/kdm/backend/CMakeLists.txt
|
|
@@ -68,6 +68,9 @@ if(UTIL_LIBRARIES)
|
|
target_link_libraries( kdm ${UTIL_LIBRARIES} )
|
|
endif(UTIL_LIBRARIES)
|
|
target_link_libraries( kdm ${POSIX4_LIBRARIES} )
|
|
+if(QT_RT_LIBRARY)
|
|
+ target_link_libraries( kdm ${QT_RT_LIBRARY} )
|
|
+endif(QT_RT_LIBRARY)
|
|
|
|
if(KDE4_ENABLE_FINAL)
|
|
macro_add_file_dependencies(${CMAKE_CURRENT_BINARY_DIR}/kdm_final_cpp.cpp ${confci})
|
|
diff --git a/kdm/backend/dm.c b/kdm/backend/dm.c
|
|
index 13d75fb..1120bd8 100644
|
|
--- a/kdm/backend/dm.c
|
|
+++ b/kdm/backend/dm.c
|
|
@@ -1163,7 +1163,7 @@ mainLoop(void)
|
|
fd_set reads;
|
|
|
|
debug("mainLoop\n");
|
|
- time(&now);
|
|
+ updateNow();
|
|
while (
|
|
#ifdef XDMCP
|
|
anyListenSockets() ||
|
|
@@ -1213,7 +1213,7 @@ mainLoop(void)
|
|
reads = wellKnownSocketsMask;
|
|
nready = select(wellKnownSocketsMax + 1, &reads, 0, 0, tvp);
|
|
debug("select returns %d\n", nready);
|
|
- time(&now);
|
|
+ updateNow();
|
|
#ifdef NEED_ENTROPY
|
|
addTimerEntropy();
|
|
#endif
|
|
diff --git a/kdm/backend/dm.h b/kdm/backend/dm.h
|
|
index 5895b5f..af8ce54 100644
|
|
--- a/kdm/backend/dm.h
|
|
+++ b/kdm/backend/dm.h
|
|
@@ -403,6 +403,17 @@ void cancelShutdown(void);
|
|
int TTYtoVT(const char *tty);
|
|
int activateVT(int vt);
|
|
|
|
+#ifdef _POSIX_MONOTONIC_CLOCK
|
|
+# define updateNow() \
|
|
+ do { \
|
|
+ struct timespec ts; \
|
|
+ clock_gettime(CLOCK_MONOTONIC, &ts); \
|
|
+ now = ts.tv_sec; \
|
|
+ } while (0)
|
|
+#else
|
|
+# define updateNow() time(&now)
|
|
+#endif
|
|
+
|
|
/* in ctrl.c */
|
|
void openCtrl(struct display *d);
|
|
void closeCtrl(struct display *d);
|
|
diff --git a/kdm/backend/session.c b/kdm/backend/session.c
|
|
index 0cd82cf..7fbdfca 100644
|
|
--- a/kdm/backend/session.c
|
|
+++ b/kdm/backend/session.c
|
|
@@ -416,7 +416,8 @@ openGreeter()
|
|
gSet(&grttalk);
|
|
if (grtproc.pid > 0)
|
|
return;
|
|
- if (time(0) < lastStart + 10) /* XXX should use some readiness indicator instead */
|
|
+ updateNow();
|
|
+ if (now < lastStart + 10) /* XXX should use some readiness indicator instead */
|
|
sessionExit(EX_UNMANAGE_DPY);
|
|
ASPrintf(&name, "greeter for display %s", td->name);
|
|
debug("starting %s\n", name);
|
|
@@ -446,7 +447,8 @@ openGreeter()
|
|
sessionExit(EX_UNMANAGE_DPY);
|
|
}
|
|
debug("%s ready\n", name);
|
|
- time(&lastStart);
|
|
+ updateNow();
|
|
+ lastStart = now;
|
|
}
|
|
|
|
int
|
|
@@ -577,7 +579,7 @@ manageSession(void)
|
|
/* NOTREACHED */
|
|
#endif
|
|
|
|
- tdiff = time(0) - td->hstent->lastExit - td->openDelay;
|
|
+ tdiff = now - td->hstent->lastExit - td->openDelay;
|
|
if (autoLogon(tdiff)) {
|
|
if (!verify(conv_auto, False))
|
|
goto gcont;
|