qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 13/34] scripts/kvm/kvm_stat: Fixup syscall error rep


From: Janosch Frank
Subject: [Qemu-devel] [PATCH 13/34] scripts/kvm/kvm_stat: Fixup syscall error reporting
Date: Thu, 10 Dec 2015 13:12:43 +0100

In 2008 a patch was written that introduced ctypes.get_errno() and
set_errno() as official interfaces to the libc errno variable. Using
them we can avoid accessing private libc variables.
The patch was included in python 2.6.

Also we need to raise the right exception, with the right parameters
and a helpful message.
---
 scripts/kvm/kvm_stat | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 83d15a1..62ca853 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -287,10 +287,8 @@ filters['kvm_userspace_exit'] = ('reason', 
USERSPACE_EXIT_REASONS)
 if EXIT_REASONS:
     filters['kvm_exit'] = ('exit_reason', EXIT_REASONS)
 
-libc = ctypes.CDLL('libc.so.6')
+libc = ctypes.CDLL('libc.so.6', use_errno=True)
 syscall = libc.syscall
-get_errno = libc.__errno_location
-get_errno.restype = ctypes.POINTER(ctypes.c_int)
 
 class perf_event_attr(ctypes.Structure):
     _fields_ = [('type', ctypes.c_uint32),
@@ -351,8 +349,9 @@ class Event(object):
             group_leader = group.events[0].fd
         fd = _perf_event_open(attr, -1, group.cpu, group_leader, 0)
         if fd == -1:
-            err = get_errno()[0]
-            raise Exception('perf_event_open failed, errno = ' + err.__str__())
+            err = ctypes.get_errno()
+            raise OSError(err, os.os.strerror(err),
+                          'while calling sys_perf_event_open().')
         if tracefilter:
             fcntl.ioctl(fd, IOCTL_NUMBERS['SET_FILTER'], tracefilter)
         self.fd = fd
-- 
2.3.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]