aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/sys/common/erl_check_io.c
diff options
context:
space:
mode:
authorRick Reed <[email protected]>2012-03-16 10:14:32 -0700
committerSverker Eriksson <[email protected]>2012-06-18 11:39:42 +0200
commit0ed14ae2c365bc7f37442902e389f4f75f44aa94 (patch)
treea0df351561c362ebb37d0541bba3d6215cb036ee /erts/emulator/sys/common/erl_check_io.c
parentea31957b8c32dda844ecf690878687996830bb84 (diff)
downloadotp-0ed14ae2c365bc7f37442902e389f4f75f44aa94.tar.gz
otp-0ed14ae2c365bc7f37442902e389f4f75f44aa94.tar.bz2
otp-0ed14ae2c365bc7f37442902e389f4f75f44aa94.zip
Make allocation of check_io tables more scalable.
Diffstat (limited to 'erts/emulator/sys/common/erl_check_io.c')
-rw-r--r--erts/emulator/sys/common/erl_check_io.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/erts/emulator/sys/common/erl_check_io.c b/erts/emulator/sys/common/erl_check_io.c
index c1336c60d9..81ac423a1d 100644
--- a/erts/emulator/sys/common/erl_check_io.c
+++ b/erts/emulator/sys/common/erl_check_io.c
@@ -39,7 +39,6 @@
#include "dtrace-wrapper.h"
#ifdef ERTS_SYS_CONTINOUS_FD_NUMBERS
-# define ERTS_DRV_EV_STATE_EXTRA_SIZE 128
#else
# include "safe_hash.h"
# define DRV_EV_STATE_HTAB_SIZE 1024
@@ -334,12 +333,14 @@ static void
grow_drv_ev_state(int min_ix)
{
int i;
- int new_len = min_ix + 1 + ERTS_DRV_EV_STATE_EXTRA_SIZE;
+ int new_len;
+
+ new_len = ERTS_POLL_EXPORT(erts_poll_get_table_len)(min_ix + 1);
if (new_len > max_fds)
new_len = max_fds;
erts_smp_mtx_lock(&drv_ev_state_grow_lock);
- if (erts_smp_atomic_read_nob(&drv_ev_state_len) <= min_ix) {
+ if (erts_smp_atomic_read_nob(&drv_ev_state_len) <= new_len) {
for (i=0; i<DRV_EV_STATE_LOCK_CNT; i++) { /* lock all fd's */
erts_smp_mtx_lock(&drv_ev_state_locks[i].lck);
}