[Piglit] [PATCH] Fix the fnctl import on Windows
Vinson Lee
vlee at freedesktop.org
Wed Jun 1 15:33:23 UTC 2016
On Tue, May 31, 2016 at 1:45 PM, Dylan Baker <dylan at pnwbakers.com> wrote:
> Quoting Olivier Berthier (2016-05-30 03:21:14)
>> 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
>>
>> _______________________________________________
>> Piglit mailing list
>> Piglit at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/piglit
>
> Brian, can you have someone test this and see if it works for you?
>
> Dylan
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/piglit
>
This patch disables fnctl import on all non-Linux instead of just Windows.
More information about the Piglit
mailing list