[PATCH v2 1/2] nsiproxy: Avoid redundant pid mapping in tcp_conns_enumerate_all().

Huw Davies huw at codeweavers.com
Wed Mar 23 04:07:24 CDT 2022


From: Paul Gofman <pgofman at codeweavers.com>

Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/nsiproxy.sys/tcp.c | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)

diff --git a/dlls/nsiproxy.sys/tcp.c b/dlls/nsiproxy.sys/tcp.c
index 0cd81ae86e5..491ac797100 100644
--- a/dlls/nsiproxy.sys/tcp.c
+++ b/dlls/nsiproxy.sys/tcp.c
@@ -540,7 +540,7 @@ static NTSTATUS tcp_conns_enumerate_all( DWORD filter, struct nsi_tcp_conn_key *
         memset( &key, 0, sizeof(key) );
         memset( &dyn, 0, sizeof(dyn) );
         memset( &stat, 0, sizeof(stat) );
-        pid_map = get_pid_map( &pid_map_size );
+        if (static_data) pid_map = get_pid_map( &pid_map_size );
 
         /* skip header line */
         ptr = fgets( buf, sizeof(buf), fp );
@@ -558,15 +558,17 @@ static NTSTATUS tcp_conns_enumerate_all( DWORD filter, struct nsi_tcp_conn_key *
             key.local.Ipv4.sin_port = htons( key.local.Ipv4.sin_port );
             key.remote.Ipv4.sin_port = htons( key.remote.Ipv4.sin_port );
 
-            stat.pid = find_owning_pid( pid_map, pid_map_size, inode );
-            stat.create_time = 0; /* FIXME */
-            stat.mod_info = 0; /* FIXME */
-
             if (num < *count)
             {
                 if (key_data) *key_data++ = key;
                 if (dynamic_data) *dynamic_data++ = dyn;
-                if (static_data) *static_data++ = stat;
+                if (static_data)
+                {
+                    stat.pid = find_owning_pid( pid_map, pid_map_size, inode );
+                    stat.create_time = 0; /* FIXME */
+                    stat.mod_info = 0; /* FIXME */
+                    *static_data++ = stat;
+                }
             }
             num++;
         }
@@ -601,16 +603,17 @@ static NTSTATUS tcp_conns_enumerate_all( DWORD filter, struct nsi_tcp_conn_key *
                                                                      addr_scopes_size );
                 key.remote.Ipv6.sin6_scope_id = find_ipv6_addr_scope( &key.remote.Ipv6.sin6_addr, addr_scopes,
                                                                       addr_scopes_size );
-
-                stat.pid = find_owning_pid( pid_map, pid_map_size, inode );
-                stat.create_time = 0; /* FIXME */
-                stat.mod_info = 0; /* FIXME */
-
                 if (num < *count)
                 {
                     if (key_data) *key_data++ = key;
                     if (dynamic_data) *dynamic_data++ = dyn;
-                    if (static_data) *static_data++ = stat;
+                    if (static_data)
+                    {
+                        stat.pid = find_owning_pid( pid_map, pid_map_size, inode );
+                        stat.create_time = 0; /* FIXME */
+                        stat.mod_info = 0; /* FIXME */
+                        *static_data++ = stat;
+                    }
                 }
                 num++;
             }
@@ -649,7 +652,7 @@ static NTSTATUS tcp_conns_enumerate_all( DWORD filter, struct nsi_tcp_conn_key *
         if (len <= sizeof(struct xinpgen)) goto err;
 
         addr_scopes = get_ipv6_addr_scope_table( &addr_scopes_size );
-        pid_map = get_pid_map( &pid_map_size );
+        if (static_data) pid_map = get_pid_map( &pid_map_size );
 
         orig_xig = (struct xinpgen *)buf;
         xig = orig_xig;
@@ -708,15 +711,17 @@ static NTSTATUS tcp_conns_enumerate_all( DWORD filter, struct nsi_tcp_conn_key *
                                                                       addr_scopes_size );
             }
 
-            stat.pid = find_owning_pid( pid_map, pid_map_size, (UINT_PTR)sock->so_pcb );
-            stat.create_time = 0; /* FIXME */
-            stat.mod_info = 0; /* FIXME */
-
             if (num < *count)
             {
                 if (key_data) *key_data++ = key;
                 if (dynamic_data) *dynamic_data++ = dyn;
-                if (static_data) *static_data++ = stat;
+                if (static_data)
+                {
+                    stat.pid = find_owning_pid( pid_map, pid_map_size, (UINT_PTR)sock->so_pcb );
+                    stat.create_time = 0; /* FIXME */
+                    stat.mod_info = 0; /* FIXME */
+                    *static_data++ = stat;
+                }
             }
             num++;
         }
-- 
2.23.0




More information about the wine-devel mailing list