desktop/kde-workspace/revert-monotonic-clock.patch
2011-07-22 18:02:15 +00:00

306 lines
10 KiB
Diff

diff -Npur kde-workspace-4.6.90/kdm/backend/CMakeLists.txt kde-workspace-4.6.80/kdm/backend/CMakeLists.txt
--- kde-workspace-4.6.90/kdm/backend/CMakeLists.txt 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/backend/CMakeLists.txt 2011-05-20 22:32:06.000000000 +0200
@@ -68,9 +68,6 @@ 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 -Npur kde-workspace-4.6.90/kdm/backend/ctrl.c kde-workspace-4.6.80/kdm/backend/ctrl.c
--- kde-workspace-4.6.90/kdm/backend/ctrl.c 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/backend/ctrl.c 2011-05-20 22:32:06.000000000 +0200
@@ -334,7 +334,6 @@ strCat(char **bp, const char *str)
static void
sdCat(char **bp, SdRec *sdr)
{
- int delta = nowMonotonic ? time(0) - now : 0;
if (sdr->how == SHUT_HALT)
strCat(bp, "halt,");
else
@@ -342,11 +341,11 @@ sdCat(char **bp, SdRec *sdr)
if (sdr->start == TO_INF)
strCat(bp, "0,");
else
- *bp += sprintf(*bp, "%d,", sdr->start ? sdr->start + delta : 0);
+ *bp += sprintf(*bp, "%d,", sdr->start);
if (sdr->timeout == TO_INF)
strCat(bp, "-1,");
else
- *bp += sprintf(*bp, "%d,", sdr->timeout ? sdr->timeout + delta : 0);
+ *bp += sprintf(*bp, "%d,", sdr->timeout);
if (sdr->force == SHUT_ASK)
strCat(bp, "ask");
else if (sdr->force == SHUT_FORCE)
@@ -648,12 +647,8 @@ processCtrl(const char *string, int len,
}
sdr.start = strtol(*ap, &bp, 10);
if (bp != *ap && !*bp) {
- if (**ap == '+') {
+ if (**ap == '+')
sdr.start += now;
- } else if (nowMonotonic && sdr.start) {
- sdr.start -= time(0);
- sdr.start += now;
- }
if (!*++ap)
goto miss;
sdr.timeout = strtol(*ap, &bp, 10);
@@ -661,15 +656,11 @@ processCtrl(const char *string, int len,
fLog(d, fd, "bad", "invalid timeout %\"s", ar[3]);
goto bust;
}
+ if (**ap == '+')
+ sdr.timeout += sdr.start ? sdr.start : now;
if (sdr.timeout < 0) {
sdr.timeout = TO_INF;
} else {
- if (**ap == '+') {
- sdr.timeout += sdr.start ? sdr.start : now;
- } else if (nowMonotonic && sdr.timeout) {
- sdr.timeout -= time(0);
- sdr.timeout += now;
- }
if (!*++ap)
goto miss;
if (!strcmp(*ap, "force")) {
diff -Npur kde-workspace-4.6.90/kdm/backend/dm.c kde-workspace-4.6.80/kdm/backend/dm.c
--- kde-workspace-4.6.90/kdm/backend/dm.c 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/backend/dm.c 2011-05-20 22:32:06.000000000 +0200
@@ -74,9 +74,6 @@ static int stopping;
SdRec sdRec = { 0, 0, 0, TO_INF, TO_INF, 0, 0, 0 };
time_t now;
-#ifndef nowMonotonic
-int nowMonotonic;
-#endif
#if KDM_LIBEXEC_STRIP != -1
char *progpath;
@@ -106,10 +103,6 @@ main(int argc, char **argv)
if (fcntl(2, F_GETFD) < 0)
dup2(0, 2);
-#ifndef nowMonotonic
- nowMonotonic = sysconf(_SC_MONOTONIC_CLOCK) >= 200112L;
-#endif
-
#if KDM_LIBEXEC_STRIP == -1
prog = strrchr(argv[0], '/');
progname = prog = prog ? prog + 1 : argv[0];
@@ -330,20 +323,6 @@ main(int argc, char **argv)
return 0;
}
-void
-updateNow(void)
-{
-#if (_POSIX_MONOTONIC_CLOCK >= 0)
- if (nowMonotonic) {
- struct timespec ts;
- clock_gettime(CLOCK_MONOTONIC, &ts);
- /* Linux' monotonic clock starts at zero, but this is assumed to mean "long ago". */
- now = ts.tv_sec + 10000;
- } else
-#endif
- time(&now);
-}
-
#ifdef HAVE_VTS
int
@@ -1184,7 +1163,7 @@ mainLoop(void)
fd_set reads;
debug("mainLoop\n");
- updateNow();
+ time(&now);
while (
#ifdef XDMCP
anyListenSockets() ||
@@ -1234,7 +1213,7 @@ mainLoop(void)
reads = wellKnownSocketsMask;
nready = select(wellKnownSocketsMax + 1, &reads, 0, 0, tvp);
debug("select returns %d\n", nready);
- updateNow();
+ time(&now);
#ifdef NEED_ENTROPY
addTimerEntropy();
#endif
diff -Npur kde-workspace-4.6.90/kdm/backend/dm.h kde-workspace-4.6.80/kdm/backend/dm.h
--- kde-workspace-4.6.90/kdm/backend/dm.h 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/backend/dm.h 2011-05-20 22:32:06.000000000 +0200
@@ -403,18 +403,6 @@ void cancelShutdown(void);
int TTYtoVT(const char *tty);
int activateVT(int vt);
-#ifndef _POSIX_MONOTONIC_CLOCK
-# define _POSIX_MONOTONIC_CLOCK -1
-#endif
-#if (_POSIX_MONOTONIC_CLOCK > 0)
-# define nowMonotonic 1
-#elif (_POSIX_MONOTONIC_CLOCK < 0)
-# define nowMonotonic 0
-#else
-extern int nowMonotonic;
-#endif
-void updateNow(void);
-
/* in ctrl.c */
void openCtrl(struct display *d);
void closeCtrl(struct display *d);
diff -Npur kde-workspace-4.6.90/kdm/backend/greet.h kde-workspace-4.6.80/kdm/backend/greet.h
--- kde-workspace-4.6.90/kdm/backend/greet.h 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/backend/greet.h 2011-05-20 22:32:06.000000000 +0200
@@ -146,8 +146,6 @@ from the copyright holder.
#define G_DChoose 3 /* run chooser */
#endif
-#define G_Interact 4 /* greeter got user input. possible crash is probably not spontaneous. */
-
#define G_Shutdown 101 /* 5*int, string; async */
# define SHUT_REBOOT 1 /* how */
# define SHUT_HALT 2
diff -Npur kde-workspace-4.6.90/kdm/backend/session.c kde-workspace-4.6.80/kdm/backend/session.c
--- kde-workspace-4.6.90/kdm/backend/session.c 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/backend/session.c 2011-05-20 22:32:06.000000000 +0200
@@ -409,12 +409,15 @@ void
openGreeter()
{
char *name, **env;
+ static time_t lastStart;
int cmd;
Cursor xcursor;
gSet(&grttalk);
if (grtproc.pid > 0)
return;
+ if (time(0) < 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);
@@ -443,6 +446,7 @@ openGreeter()
sessionExit(EX_UNMANAGE_DPY);
}
debug("%s ready\n", name);
+ time(&lastStart);
}
int
@@ -544,7 +548,7 @@ manageSession(void)
{
int ex, cmd;
volatile int clientPid = -1;
- time_t tdiff, startt;
+ volatile time_t tdiff = 0;
debug("manageSession %s\n", td->name);
if ((ex = Setjmp(abortSession))) {
@@ -573,16 +577,12 @@ manageSession(void)
/* NOTREACHED */
#endif
- updateNow();
- tdiff = now - td->hstent->lastExit - td->openDelay;
+ tdiff = time(0) - td->hstent->lastExit - td->openDelay;
if (autoLogon(tdiff)) {
- if (!verify(conv_auto, False)) {
- startt = now;
+ if (!verify(conv_auto, False))
goto gcont;
- }
} else {
regreet:
- startt = now;
openGreeter();
#ifdef XDMCP
if (((td->displayType & d_location) == dLocal) &&
@@ -596,14 +596,12 @@ manageSession(void)
G_GreetTimed : G_Greet);
gcont:
cmd = ctrlGreeterWait(True);
- if (cmd == G_Interact) {
- startt = 0;
- goto gcont;
- }
#ifdef XDMCP
- while (cmd == G_DChoose) {
+ recmd:
+ if (cmd == G_DChoose) {
choose:
cmd = doChoose();
+ goto recmd;
}
if (cmd == G_DGreet)
continue;
@@ -616,9 +614,6 @@ manageSession(void)
logError("Received unknown command %d from greeter\n", cmd);
closeGreeter(True);
}
- updateNow();
- if (now < startt + 120) /* Greeter crashed spontaneously. Avoid endless loop. */
- sessionExit(EX_UNMANAGE_DPY);
goto regreet;
}
}
diff -Npur kde-workspace-4.6.90/kdm/kfrontend/kgapp.cpp kde-workspace-4.6.80/kdm/kfrontend/kgapp.cpp
--- kde-workspace-4.6.90/kdm/kfrontend/kgapp.cpp 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/kfrontend/kgapp.cpp 2011-05-20 22:32:07.000000000 +0200
@@ -74,7 +74,7 @@ sigAlarm(int)
GreeterApp::GreeterApp(int &argc, char **argv) :
inherited(argc, argv),
- regrabPtr(false), regrabKbd(false), initalBusy(true), sendInteract(false),
+ regrabPtr(false), regrabKbd(false), initalBusy(true),
dragWidget(0)
{
pingInterval = _isLocal ? 0 : _pingInterval;
@@ -203,14 +203,6 @@ GreeterApp::x11EventFilter(XEvent * ev)
break;
}
break;
- default:
- return false;
- }
- if (sendInteract) {
- sendInteract = false;
- // We assume that no asynchronous communication is going on
- // before the first user interaction.
- gSendInt(G_Interact);
}
return false;
}
@@ -487,7 +479,6 @@ main(int argc ATTR_UNUSED, char **argv)
}
}
QObject::connect(dialog, SIGNAL(ready()), &app, SLOT(markReady()));
- app.enableSendInteract();
debug("entering event loop\n");
rslt = dialog->exec();
debug("left event loop\n");
diff -Npur kde-workspace-4.6.90/kdm/kfrontend/kgapp.h kde-workspace-4.6.80/kdm/kfrontend/kgapp.h
--- kde-workspace-4.6.90/kdm/kfrontend/kgapp.h 2011-06-22 16:29:18.000000000 +0200
+++ kde-workspace-4.6.80/kdm/kfrontend/kgapp.h 2011-05-20 22:32:07.000000000 +0200
@@ -37,7 +37,6 @@ class GreeterApp : public QApplication {
public:
GreeterApp(int &argc, char **argv);
void markBusy();
- void enableSendInteract() { sendInteract = true; }
virtual bool x11EventFilter(XEvent *);
public Q_SLOTS:
@@ -51,7 +50,7 @@ class GreeterApp : public QApplication {
private:
int pingInterval, pingTimerId;
- bool regrabPtr, regrabKbd, initalBusy, sendInteract;
+ bool regrabPtr, regrabKbd, initalBusy;
QPoint mouseStartPos, dialogStartPos;
QWidget *dragWidget;
};