static PyObject *meth_QWriteLocker_relock(PyObject *sipSelf, PyObject *sipArgs) { PyObject *sipParseErr = NULL; { QWriteLocker *sipCpp; if (sipParseArgs(&sipParseErr, sipArgs, "B", &sipSelf, sipType_QWriteLocker, &sipCpp)) { Py_BEGIN_ALLOW_THREADS sipCpp->relock(); Py_END_ALLOW_THREADS Py_INCREF(Py_None); return Py_None; } } /* Raise an exception if the arguments couldn't be parsed. */ sipNoMethod(sipParseErr, sipName_QWriteLocker, sipName_relock, doc_QWriteLocker_relock); return NULL; }
QueueInterface::QueueStatus SgeQueueInterface::getStatus(Structure *s) const { // lock structure QWriteLocker locker (s->lock()); QStringList queueData = getQueueList(); unsigned int jobID = static_cast<unsigned int>(s->getJobID()); // If the queueData cannot be fetched, queueData contains a single // string, "CommError" if (queueData.size() == 1 && queueData[0].compare("CommError") == 0) { return QueueInterface::CommunicationError; } // If jobID = 0 and structure is not in "Submitted" state, return an error. if (!jobID && s->getStatus() != Structure::Submitted) { return QueueInterface::Error; } // Determine status if structure is in the queue. queueData // entries are of the following format: // // job-ID prior name user state submit/start at queue function // 231 0 hydra craig r 07/13/96 durin.q MASTER // 20:27:15 // // (Note that the whitespace has been condensed in the above) QString status; QStringList list; for (int i = 0; i < queueData.size(); i++) { list = queueData.at(i).split(QRegExp("\\s+"), QString::SkipEmptyParts); if (list[0].toUInt() == jobID) { status = list[4]; continue; } } // If structure is submitted, check if it is in the queue. If not, // check if the completion file has been written. // // If the completion file exists, then the job finished before the // queue checks could see it, and the function will continue on to // the status checks below. // // If the structure in Submitted state if (s->getStatus() == Structure::Submitted) { // and the jobID isn't in the queue if (status.isEmpty()) { // check if the output file is absent bool exists; if (!m_opt->optimizer()->checkIfOutputFileExists(s, &exists)) { return QueueInterface::CommunicationError; } if (!exists) { // The job is still pending return QueueInterface::Pending; } else { // The job has completed. return QueueInterface::Started; } } else { // The job is in the queue return QueueInterface::Started; } } if (status.contains('r')) { return QueueInterface::Running; } else if (status.contains(QRegExp("q|w|s"))) { return QueueInterface::Queued; } else { // Entry is missing from queue. Were the output files written? locker.unlock(); bool outputFileExists; if (!m_opt->optimizer()->checkIfOutputFileExists(s, &outputFileExists) ) { return QueueInterface::CommunicationError; } locker.relock(); if (outputFileExists) { // Did the job finish successfully? bool success; if (!m_opt->optimizer()->checkForSuccessfulOutput(s, &success)) { return QueueInterface::CommunicationError; } if (success) { return QueueInterface::Success; } else { return QueueInterface::Error; } } } // Not in queue and no output? return QueueInterface::Unknown; }