diff options
| author | 2010-04-30 13:35:57 -0500 | |
|---|---|---|
| committer | 2012-03-20 23:25:55 +0100 | |
| commit | 3877711296cbfa4a0bcafc3c5560609a1ce2d079 (patch) | |
| tree | 751f1fd27ce3ee5d8dd9d748600381c0d2e5d6bd /cython/screenshotr.pxi | |
| parent | 74943414c8e04a92f42dcbc4fac1599c7f9deed2 (diff) | |
| download | libimobiledevice-3877711296cbfa4a0bcafc3c5560609a1ce2d079.tar.gz libimobiledevice-3877711296cbfa4a0bcafc3c5560609a1ce2d079.tar.bz2 | |
More memory leak plugging. Some code cleanup too.
Diffstat (limited to 'cython/screenshotr.pxi')
| -rw-r--r-- | cython/screenshotr.pxi | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/cython/screenshotr.pxi b/cython/screenshotr.pxi index d7dfc57..9213b64 100644 --- a/cython/screenshotr.pxi +++ b/cython/screenshotr.pxi | |||
| @@ -32,11 +32,7 @@ cdef class ScreenshotrClient(DeviceLinkService): | |||
| 32 | cdef screenshotr_client_t _c_client | 32 | cdef screenshotr_client_t _c_client |
| 33 | 33 | ||
| 34 | def __cinit__(self, iDevice device not None, int port, *args, **kwargs): | 34 | def __cinit__(self, iDevice device not None, int port, *args, **kwargs): |
| 35 | cdef: | 35 | self.handle_error(screenshotr_client_new(device._c_dev, port, &self._c_client)) |
| 36 | iDevice dev = device | ||
| 37 | screenshotr_error_t err | ||
| 38 | err = screenshotr_client_new(dev._c_dev, port, &self._c_client) | ||
| 39 | self.handle_error(err) | ||
| 40 | 36 | ||
| 41 | def __dealloc__(self): | 37 | def __dealloc__(self): |
| 42 | cdef screenshotr_error_t err | 38 | cdef screenshotr_error_t err |
| @@ -46,15 +42,21 @@ cdef class ScreenshotrClient(DeviceLinkService): | |||
| 46 | 42 | ||
| 47 | cpdef bytes take_screenshot(self): | 43 | cpdef bytes take_screenshot(self): |
| 48 | cdef: | 44 | cdef: |
| 49 | char* c_data | 45 | char* c_data = NULL |
| 50 | uint64_t data_size | 46 | uint64_t data_size |
| 51 | bytes result | 47 | bytes result |
| 52 | screenshotr_error_t err | 48 | screenshotr_error_t err |
| 53 | 49 | ||
| 54 | err = screenshotr_take_screenshot(self._c_client, &c_data, &data_size) | 50 | err = screenshotr_take_screenshot(self._c_client, &c_data, &data_size) |
| 55 | self.handle_error(err) | 51 | try: |
| 56 | result = c_data[:data_size] | 52 | self.handle_error(err) |
| 57 | return result | 53 | |
| 54 | result = c_data[:data_size] | ||
| 55 | return result | ||
| 56 | except Exception, e: | ||
| 57 | if c_data != NULL: | ||
| 58 | stdlib.free(c_data) | ||
| 59 | raise | ||
| 58 | 60 | ||
| 59 | cdef inline BaseError _error(self, int16_t ret): | 61 | cdef inline BaseError _error(self, int16_t ret): |
| 60 | return ScreenshotrError(ret) | 62 | return ScreenshotrError(ret) |
