Alexandre Julliard : server: Try to use /proc/pid/ mem to read process memory since it should be faster.
Module: wine Branch: stable Commit: ad521cac57d8be07b592f255ee5e802743e62a43 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ad521cac57d8be07b592f255ee... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Jul 21 10:50:12 2010 +0200 server: Try to use /proc/pid/mem to read process memory since it should be faster. (cherry picked from commit 1a79912a10a6cded54d1f1de5f746bbffec3ffee) --- server/ptrace.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/server/ptrace.c b/server/ptrace.c index 1118048..111368b 100644 --- a/server/ptrace.c +++ b/server/ptrace.c @@ -19,9 +19,11 @@ */ #include "config.h" +#include "wine/port.h" #include <assert.h> #include <errno.h> +#include <fcntl.h> #include <stdio.h> #include <signal.h> #include <stdarg.h> @@ -377,6 +379,24 @@ int read_process_memory( struct process *process, client_ptr_t ptr, data_size_t if (suspend_for_ptrace( thread )) { + if (len > 3) /* /proc/pid/mem should be faster for large sizes */ + { + char procmem[24]; + int fd; + + sprintf( procmem, "/proc/%u/mem", process->unix_pid ); + if ((fd = open( procmem, O_RDONLY )) != -1) + { + ssize_t ret = pread( fd, dest, size, ptr ); + close( fd ); + if (ret == size) + { + len = 0; + goto done; + } + } + } + if (len > 1) { if (read_thread_long( thread, addr++, &data ) == -1) goto done;
participants (1)
-
Alexandre Julliard