[Piglit] [PATCH] Fix the fnctl import on Windows
Olivier Berthier
olivierx.berthier at linux.intel.com
Mon May 30 10:21:14 UTC 2016
This patch disables the fnctl import on Windows.
---
framework/monitoring.py | 97 ++++++++++++++++++++++++++-----------------------
1 file changed, 52 insertions(+), 45 deletions(-)
diff --git a/framework/monitoring.py b/framework/monitoring.py
index f178bd6..9f7a0d1 100644
--- a/framework/monitoring.py
+++ b/framework/monitoring.py
@@ -36,12 +36,17 @@ from __future__ import (
)
import abc
import errno
-import fcntl
import os
import re
+import sys
import six
+try:
+ import fcntl
+except:
+ pass
+
from framework.core import PIGLIT_CONFIG
from framework.dmesg import LinuxDmesg
from framework import exceptions
@@ -245,50 +250,52 @@ class MonitoringFile(BaseMonitoring):
This implements also a specific method for reading locked files.
"""
-
- try:
- with open(self._monitoring_source, 'r') as f:
- lines = []
- if self._is_locked:
- # Create a duplicated file descriptor, this avoid lock
- fd = os.dup(f.fileno())
- # use I/O control for reading the lines
- fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NONBLOCK)
-
- while True:
- try:
- line = os.read(fd, 1024)
- if not line:
- break;
- except OSError as e:
- if e.errno == errno.EAGAIN:
- break
- else:
- raise e
- lines.append(line.decode("utf-8", "strict"))
- os.close(fd)
-
- else:
- lines = f.read().splitlines()
-
- f.close()
-
- # Find all new entries, do this by slicing the list of the lines to only
- # returns elements after the last element stored. If there are not
- # matches a value error is raised, that means all of the lines are new
- l = 0
- for index, item in enumerate(reversed(lines)):
- if item == self._last_message:
- l = len(lines) - index # don't include the matched element
- break
- self._new_messages = lines[l:]
- # Attempt to store the last element of lines,
- # unless there was no line
- self._last_message = lines[-1] if lines else None
- except Exception:
- # if an error occured, we consider there are no new messages
- self._new_messages = []
- pass
+ if sys.platform.startswith('linux'):
+ try:
+ with open(self._monitoring_source, 'r') as f:
+ lines = []
+ if self._is_locked:
+ # Create a duplicated file descriptor, this avoid lock
+ fd = os.dup(f.fileno())
+ # use I/O control for reading the lines
+ fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NONBLOCK)
+
+ while True:
+ try:
+ line = os.read(fd, 1024)
+ if not line:
+ break;
+ except OSError as e:
+ if e.errno == errno.EAGAIN:
+ break
+ else:
+ raise e
+ lines.append(line.decode("utf-8", "strict"))
+ os.close(fd)
+
+ else:
+ lines = f.read().splitlines()
+
+ f.close()
+
+ # Find all new entries, do this by slicing the list of
+ # the lines to only returns elements after the last element
+ # stored. If there are not matches a value error is raised,
+ # that means all of the lines are new
+ l = 0
+ for index, item in enumerate(reversed(lines)):
+ if item == self._last_message:
+ # don't include the matched element
+ l = len(lines) - index
+ break
+ self._new_messages = lines[l:]
+ # Attempt to store the last element of lines,
+ # unless there was no line
+ self._last_message = lines[-1] if lines else None
+ except Exception:
+ # if an error occured, we consider there are no new messages
+ self._new_messages = []
+ pass
class MonitoringLinuxDmesg(BaseMonitoring, LinuxDmesg):
--
2.8.1
More information about the Piglit
mailing list