lock network table

This commit is contained in:
henrypp committed 2021-04-06 08:57:57 +06:00
1 parent 5cf3c7fa26
commit ffa2d2dea4
4 files changed
+33 -11

No files matched your search

+1
View File
@@ -57,6 +57,7 @@ DECLSPEC_SELECTANY R_SPINLOCK lock_apply;
DECLSPEC_SELECTANY R_SPINLOCK lock_checkbox;
DECLSPEC_SELECTANY R_SPINLOCK lock_logbusy;
DECLSPEC_SELECTANY R_SPINLOCK lock_logthread;
DECLSPEC_SELECTANY R_SPINLOCK lock_network;
DECLSPEC_SELECTANY R_SPINLOCK lock_profile;
DECLSPEC_SELECTANY R_SPINLOCK lock_transaction;
+25 -9
View File
@@ -1669,7 +1669,7 @@ BOOLEAN _app_isvalidconnection (ADDRESS_FAMILY af, LPCVOID paddr)
return FALSE;
}
VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
VOID _app_generate_connections (_Inout_ PR_HASHTABLE result_map, _Inout_ PR_HASHTABLE checker_map)
{
_r_obj_clearhashtable (checker_map);
@@ -1705,7 +1705,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
network.network_hash = _app_getnetworkhash (AF_INET, tcp4_table->table[i].dwOwningPid, &remote_addr, tcp4_table->table[i].dwRemotePort, &local_addr, tcp4_table->table[i].dwLocalPort, IPPROTO_TCP, tcp4_table->table[i].dwState);
if (_r_obj_findhashtable (network_map, network.network_hash))
if (_r_obj_findhashtable (result_map, network.network_hash))
{
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
@@ -1734,7 +1734,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
network.is_connection = TRUE;
}
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
_r_spinlock_acquireexclusive (&lock_network);
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
_r_spinlock_releaseexclusive (&lock_network);
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
}
@@ -1762,7 +1766,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
network.network_hash = _app_getnetworkhash (AF_INET6, tcp6_table->table[i].dwOwningPid, tcp6_table->table[i].ucRemoteAddr, tcp6_table->table[i].dwRemotePort, tcp6_table->table[i].ucLocalAddr, tcp6_table->table[i].dwLocalPort, IPPROTO_TCP, tcp6_table->table[i].dwState);
if (_r_obj_findhashtable (network_map, network.network_hash))
if (_r_obj_findhashtable (result_map, network.network_hash))
{
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
@@ -1791,7 +1795,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
network.is_connection = TRUE;
}
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
_r_spinlock_acquireexclusive (&lock_network);
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
_r_spinlock_releaseexclusive (&lock_network);
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
}
@@ -1822,7 +1830,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
network.network_hash = _app_getnetworkhash (AF_INET, udp4_table->table[i].dwOwningPid, NULL, 0, &local_addr, udp4_table->table[i].dwLocalPort, IPPROTO_UDP, 0);
if (_r_obj_findhashtable (network_map, network.network_hash))
if (_r_obj_findhashtable (result_map, network.network_hash))
{
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
@@ -1843,7 +1851,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
if (_app_isvalidconnection (network.af, &network.local_addr))
network.is_connection = TRUE;
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
_r_spinlock_acquireexclusive (&lock_network);
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
_r_spinlock_releaseexclusive (&lock_network);
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
}
@@ -1871,7 +1883,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
network.network_hash = _app_getnetworkhash (AF_INET6, udp6_table->table[i].dwOwningPid, NULL, 0, udp6_table->table[i].ucLocalAddr, udp6_table->table[i].dwLocalPort, IPPROTO_UDP, 0);
if (_r_obj_findhashtable (network_map, network.network_hash))
if (_r_obj_findhashtable (result_map, network.network_hash))
{
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
@@ -1892,7 +1904,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
if (_app_isvalidconnection (network.af, &network.local_addr6))
network.is_connection = TRUE;
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
_r_spinlock_acquireexclusive(&lock_network);
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
_r_spinlock_releaseexclusive (&lock_network);
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
}
+1 -1
View File
@@ -50,7 +50,7 @@ PR_STRING _app_getdirectionname (_In_ FWP_DIRECTION direction, _In_ BOOLEAN is_l
COLORREF _app_getcolorvalue (_In_ SIZE_T color_hash);
VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map);
VOID _app_generate_connections (_Inout_ PR_HASHTABLE result_map, _Inout_ PR_HASHTABLE checker_map);
VOID _app_generate_packages ();
VOID _app_generate_services ();
+6 -1
View File
@@ -79,7 +79,7 @@ THREAD_API NetworkMonitorThread (_In_ PVOID lparam)
while (TRUE)
{
_app_generate_connections (checker_map);
_app_generate_connections (network_map, checker_map);
is_highlighting_enabled = _r_config_getboolean (L"IsEnableHighlighting", TRUE) && _r_config_getbooleanex (L"IsHighlightConnection", TRUE, L"colors");
current_listview_id = (INT)_r_tab_getitemlparam (hwnd, IDC_TAB, -1);
@@ -168,8 +168,12 @@ THREAD_API NetworkMonitorThread (_In_ PVOID lparam)
SIZE_T app_hash = _app_getnetworkapp (network_hash);
_r_spinlock_acquireexclusive (&lock_network);
_r_obj_removehashtableentry (network_map, network_hash);
_r_spinlock_releaseexclusive (&lock_network);
// redraw listview item
if (app_hash)
{
@@ -1695,6 +1699,7 @@ VOID _app_initialize ()
_r_spinlock_initialize (&lock_checkbox);
_r_spinlock_initialize (&lock_logbusy);
_r_spinlock_initialize (&lock_logthread);
_r_spinlock_initialize (&lock_network);
_r_spinlock_initialize (&lock_profile);
_r_spinlock_initialize (&lock_transaction);