diff options
author | Rickard Green <[email protected]> | 2012-08-15 01:28:55 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2012-12-03 21:18:06 +0100 |
commit | 50cb7c24f061fd3d7df5970d8202f47c470a4047 (patch) | |
tree | 8d352994515c3217052cc5b64b78b597028ca75c /erts/emulator/beam/erl_node_tables.c | |
parent | b434a3ab242dde66e23a72122474854f51a61eff (diff) | |
download | otp-50cb7c24f061fd3d7df5970d8202f47c470a4047.tar.gz otp-50cb7c24f061fd3d7df5970d8202f47c470a4047.tar.bz2 otp-50cb7c24f061fd3d7df5970d8202f47c470a4047.zip |
Use ptab functionality also for ports
Diffstat (limited to 'erts/emulator/beam/erl_node_tables.c')
-rw-r--r-- | erts/emulator/beam/erl_node_tables.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/erts/emulator/beam/erl_node_tables.c b/erts/emulator/beam/erl_node_tables.c index 3b400ce0de..67f413ef28 100644 --- a/erts/emulator/beam/erl_node_tables.c +++ b/erts/emulator/beam/erl_node_tables.c @@ -1274,7 +1274,7 @@ setup_reference_table(void) ErlHeapFragment *hfp; DistEntry *dep; HashInfo hi; - int i, max_processes; + int i, max; DeclareTmpHeapNoproc(heap,3); inserted_bins = NULL; @@ -1309,9 +1309,9 @@ setup_reference_table(void) #endif UnUseTmpHeapNoproc(3); - max_processes = erts_ptab_max(&erts_proc); + max = erts_ptab_max(&erts_proc); /* Insert all processes */ - for (i = 0; i < max_processes; i++) { + for (i = 0; i < max; i++) { Process *proc = erts_pix2proc(i); if (proc) { ErlMessage *msg; @@ -1383,25 +1383,33 @@ setup_reference_table(void) #endif /* Insert all ports */ - for (i = 0; i < erts_max_ports; i++) { - erts_aint32_t state = erts_smp_atomic32_read_nob(&erts_port[i].state); + max = erts_ptab_max(&erts_port); + for (i = 0; i < max; i++) { + erts_aint32_t state; + Port *prt; + + prt = erts_pix2port(i); + if (!prt) + continue; + + state = erts_atomic32_read_nob(&prt->state); if (state & ERTS_PORT_SFLGS_DEAD) continue; /* Insert links */ - if (ERTS_P_LINKS(&erts_port[i])) - insert_links(ERTS_P_LINKS(&erts_port[i]), erts_port[i].common.id); + if (ERTS_P_LINKS(prt)) + insert_links(ERTS_P_LINKS(prt), prt->common.id); /* Insert monitors */ - if (ERTS_P_MONITORS(&erts_port[i])) - insert_monitors(ERTS_P_MONITORS(&erts_port[i]), erts_port[i].common.id); + if (ERTS_P_MONITORS(prt)) + insert_monitors(ERTS_P_MONITORS(prt), prt->common.id); /* Insert port data */ - for(hfp = erts_port[i].bp; hfp; hfp = hfp->next) - insert_offheap(&(hfp->off_heap), HEAP_REF, erts_port[i].common.id); + for(hfp = prt->bp; hfp; hfp = hfp->next) + insert_offheap(&(hfp->off_heap), HEAP_REF, prt->common.id); /* Insert controller */ - if (erts_port[i].dist_entry) - insert_dist_entry(erts_port[i].dist_entry, + if (prt->dist_entry) + insert_dist_entry(prt->dist_entry, CTRL_REF, - erts_port[i].common.id, + prt->common.id, 0); } |