aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_port_task.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2012-11-11 21:13:44 +0100
committerRickard Green <[email protected]>2012-12-07 00:24:26 +0100
commit43ebafb5fb40aee326b951d18c1880e6e5fdef6b (patch)
tree531f9ec4975bdaad1813c798db42f87b9fdf7082 /erts/emulator/beam/erl_port_task.c
parent6e01408aba71e26884c5db81b8e4fa89bd803576 (diff)
downloadotp-43ebafb5fb40aee326b951d18c1880e6e5fdef6b.tar.gz
otp-43ebafb5fb40aee326b951d18c1880e6e5fdef6b.tar.bz2
otp-43ebafb5fb40aee326b951d18c1880e6e5fdef6b.zip
Add driver callback epilogue
Diffstat (limited to 'erts/emulator/beam/erl_port_task.c')
-rw-r--r--erts/emulator/beam/erl_port_task.c29
1 files changed, 1 insertions, 28 deletions
diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c
index e8ed00daee..b6b113b753 100644
--- a/erts/emulator/beam/erl_port_task.c
+++ b/erts/emulator/beam/erl_port_task.c
@@ -49,18 +49,6 @@ static void chk_task_queues(Port *pp, ErtsPortTask *execq, int processing_busy_q
#define ERTS_PT_DBG_CHK_TASK_QS(PP, EQ, PBQ)
#endif
-
-/*
- * Costs in reductions for some port operations.
- */
-#define ERTS_PORT_REDS_EXECUTE 10
-#define ERTS_PORT_REDS_FREE 100
-#define ERTS_PORT_REDS_TIMEOUT 400
-#define ERTS_PORT_REDS_INPUT 400
-#define ERTS_PORT_REDS_OUTPUT 400
-#define ERTS_PORT_REDS_EVENT 400
-#define ERTS_PORT_REDS_TERMINATE 200
-
#ifdef USE_VM_PROBES
#define DTRACE_DRIVER(PROBE_NAME, PP) \
if (DTRACE_ENABLED(PROBE_NAME)) { \
@@ -1473,22 +1461,7 @@ erts_port_task_execute(ErtsRunQueue *runq, Port **curr_port_pp)
break;
}
- state = erts_atomic32_read_nob(&pp->state);
- if ((state & ERTS_PORT_SFLG_CLOSING) && erts_is_port_ioq_empty(pp)) {
- reds += ERTS_PORT_REDS_TERMINATE;
- erts_terminate_port(pp);
- state = erts_atomic32_read_nob(&pp->state);
- }
-
- ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(pp));
-
-#ifdef ERTS_SMP
- if (pp->xports)
- erts_smp_xports_unlock(pp);
- ASSERT(!pp->xports);
-#endif
-
- ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(pp));
+ reds += erts_port_driver_callback_epilogue(pp, &state);
aborted_port_task:
schedule_port_task_free(ptp);