aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_port_task.c
diff options
context:
space:
mode:
authorPatrik Nyblom <[email protected]>2013-04-05 18:51:50 +0200
committerPatrik Nyblom <[email protected]>2013-04-05 18:51:50 +0200
commitb9ef8bac23fa0421765afe3073f430a1f0d92260 (patch)
tree94428e0a154e4c7c835d56b92fb0e42eda19b12c /erts/emulator/beam/erl_port_task.c
parentb269e15eea9232205a371d6b10c50628d836b661 (diff)
parent7b31cdb80624567568474d79bff07e053457a450 (diff)
downloadotp-b9ef8bac23fa0421765afe3073f430a1f0d92260.tar.gz
otp-b9ef8bac23fa0421765afe3073f430a1f0d92260.tar.bz2
otp-b9ef8bac23fa0421765afe3073f430a1f0d92260.zip
Merge branch 'maint-r16' into maint
Conflicts: erts/vsn.mk
Diffstat (limited to 'erts/emulator/beam/erl_port_task.c')
-rw-r--r--erts/emulator/beam/erl_port_task.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c
index ce045ec94e..0ed08bee01 100644
--- a/erts/emulator/beam/erl_port_task.c
+++ b/erts/emulator/beam/erl_port_task.c
@@ -151,9 +151,10 @@ static ERTS_INLINE void
schedule_port_task_free(ErtsPortTask *ptp)
{
#ifdef ERTS_SMP
- erts_schedule_thr_prgr_later_op(call_port_task_free,
- (void *) ptp,
- &ptp->u.release);
+ erts_schedule_thr_prgr_later_cleanup_op(call_port_task_free,
+ (void *) ptp,
+ &ptp->u.release,
+ sizeof(ErtsPortTask));
#else
port_task_free(ptp);
#endif
@@ -772,9 +773,10 @@ static void
schedule_port_task_handle_list_free(ErtsPortTaskHandleList *pthlp)
{
#ifdef ERTS_SMP
- erts_schedule_thr_prgr_later_op(free_port_task_handle_list,
- (void *) pthlp,
- &pthlp->u.release);
+ erts_schedule_thr_prgr_later_cleanup_op(free_port_task_handle_list,
+ (void *) pthlp,
+ &pthlp->u.release,
+ sizeof(ErtsPortTaskHandleList));
#else
erts_free(ERTS_ALC_T_PT_HNDL_LIST, pthlp);
#endif
@@ -1999,6 +2001,7 @@ begin_port_cleanup(Port *pp, ErtsPortTask **execqp, int *processing_busy_q_p)
* Schedule cleanup of port structure...
*/
#ifdef ERTS_SMP
+ /* Has to be more or less immediate to release any driver */
erts_schedule_thr_prgr_later_op(release_port,
(void *) pp,
&pp->common.u.release);