diff --git a/ext/toolchain/commands1.py b/ext/toolchain/commands1.py index ef492f2b..0540bcb4 100644 --- a/ext/toolchain/commands1.py +++ b/ext/toolchain/commands1.py @@ -941,6 +941,24 @@ class InternalCommands: print self.find_revision() def find_revision(self): + return self.getGitRevision() + + def getGitRevision(self): + if sys.version_info < (2, 4): + raise Exception("Python 2.4 or greater required.") + else: + p = subprocess.Popen( + ["git", "log", "--pretty=format:%h", "-n", "1"], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + stdout, stderr = p.communicate() + + if p.returncode != 0: + raise Exception('Could not get revision - git info failed with code: ' + str(p.returncode)) + + return stdout + + def find_revision_svn(self): if sys.version_info < (2, 4): stdout = commands.getoutput('svn info') else: @@ -1174,7 +1192,8 @@ class InternalCommands: shutil.rmtree(exportPath) print 'Exporting repository to: ' + exportPath - err = os.system('svn export . ' + exportPath) + os.mkdir(exportPath) + err = os.system('git archive master | tar -x -C ' + exportPath) if err != 0: raise Exception('Repository export failed: ' + str(err)) @@ -1403,7 +1422,7 @@ class InternalCommands: def dist_name_rev(self, type): # find the version number (we're puting the rev in after this) pattern = '(.*\d+\.\d+\.\d+)(.*)' - replace = '\g<1>-r' + self.find_revision() + '\g<2>' + replace = '\g<1>-' + self.find_revision() + '\g<2>' return re.sub(pattern, replace, self.dist_name(type)) def dist_usage(self): diff --git a/src/lib/platform/OSXScreen.cpp b/src/lib/platform/OSXScreen.cpp index cf58aaa2..47e5af8e 100644 --- a/src/lib/platform/OSXScreen.cpp +++ b/src/lib/platform/OSXScreen.cpp @@ -62,6 +62,10 @@ enum { kSynergyMouseScrollAxisY = 'saxy' }; +enum { + kCarbonLoopWaitTimeout = 10 +}; + // TODO: upgrade deprecated function usage in these functions. void setZeroSuppressionInterval(); void avoidSupression(); @@ -1693,17 +1697,24 @@ COSXScreen::watchSystemPowerThread(void*) // setting m_pmThreadReady to true otherwise the parent thread will // block waiting for it. if (m_pmRootPort == 0) { + LOG((CLOG_WARN "failed to init watchSystemPowerThread")); return; } LOG((CLOG_DEBUG "started watchSystemPowerThread")); - + + LOG((CLOG_DEBUG "waiting for event loop")); m_events->waitForReady(); #if defined(MAC_OS_X_VERSION_10_7) { CLock lockCarbon(m_carbonLoopMutex); if (*m_carbonLoopReady == false) { + + // we signalling carbon loop ready before starting + // unless we know how to do it within the loop + LOG((CLOG_DEBUG "signalling carbon loop ready")); + *m_carbonLoopReady = true; m_carbonLoopReady->signal(); } @@ -1713,6 +1724,7 @@ COSXScreen::watchSystemPowerThread(void*) // start the run loop LOG((CLOG_DEBUG "starting carbon loop")); CFRunLoopRun(); + LOG((CLOG_DEBUG "carbon loop has stopped")); // cleanup if (notificationPortRef) { @@ -2126,14 +2138,26 @@ void COSXScreen::waitForCarbonLoop() const { #if defined(MAC_OS_X_VERSION_10_7) - double timeout = ARCH->time() + 10; + if (*m_carbonLoopReady) { + LOG((CLOG_DEBUG "carbon loop already ready")); + return; + } + CLock lock(m_carbonLoopMutex); + + LOG((CLOG_DEBUG "waiting for carbon loop")); + + double timeout = ARCH->time() + kCarbonLoopWaitTimeout; while (!m_carbonLoopReady->wait()) { if(ARCH->time() > timeout) { - throw std::runtime_error("carbon loop is not ready within 5 sec"); + LOG((CLOG_DEBUG "carbon loop not ready, waiting again")); + timeout = ARCH->time() + kCarbonLoopWaitTimeout; } } + + LOG((CLOG_DEBUG "carbon loop ready")); #endif + } #pragma GCC diagnostic ignored "-Wdeprecated-declarations" diff --git a/test b/test index d8263ee9..e440e5c8 100644 --- a/test +++ b/test @@ -1 +1 @@ -2 \ No newline at end of file +3 \ No newline at end of file