Alexandre Julliard : server: Try to use /proc/pid/ mem to read process memory since it should be faster.
Alexandre Julliard
julliard at winehq.org
Tue Oct 5 14:41:44 CDT 2010
Module: wine
Branch: stable
Commit: ad521cac57d8be07b592f255ee5e802743e62a43
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ad521cac57d8be07b592f255ee5e802743e62a43
Author: Alexandre Julliard <julliard at 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;
More information about the wine-cvs
mailing list