aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_gc.c
diff options
context:
space:
mode:
authorFredrik Gustafsson <[email protected]>2012-12-03 10:22:40 +0100
committerFredrik Gustafsson <[email protected]>2012-12-03 10:22:40 +0100
commitc228ceb941e26a04317bd2f66a2ee64687f0f869 (patch)
treefb019fce335b6db5b92ce300ee707496a9fe759b /erts/emulator/beam/erl_gc.c
parentf78daeeccbf6de61b9e5dae4dd70f12fba03a2ff (diff)
parent26dffbeec17226a25c00d4072cb0f5c29ed48cea (diff)
downloadotp-c228ceb941e26a04317bd2f66a2ee64687f0f869.tar.gz
otp-c228ceb941e26a04317bd2f66a2ee64687f0f869.tar.bz2
otp-c228ceb941e26a04317bd2f66a2ee64687f0f869.zip
Merge branch 'fredrik/ssh/fix-idle-tests' into fredrik/ssh/rekeying
* fredrik/ssh/fix-idle-tests: (50 commits) Modifications to idle_time testcase Teach Win installer to handle redist on w2012/w8 ssl: Receive port EXIT-message so that it does not get mixed up with the protocol-error message we are expecting ssl: Add and enhance tests ssl: Consider new server options when resuming a session Prepare release ssl: Add dependencies to Makefile Simplify the code for the generated info/0 function Don't try to work around a non-loadable NIF library Fix BER encoding when multiple levels of typedefs are used Update megaco documentation Update documentation for the asn1 application Fix other applications Fix use of asn1 in megaco Remove the unused asn1ct_gen_ber module Fix erroneous skipping for jinterface, erl_interface and ic kernel: Heart port needs to be unregistered Update preloaded modules Update primary bootstrap Update copyright years ...
Diffstat (limited to 'erts/emulator/beam/erl_gc.c')
-rw-r--r--erts/emulator/beam/erl_gc.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 6075a527c3..5ae4b9254b 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -336,6 +336,19 @@ erts_gc_after_bif_call(Process* p, Eterm result, Eterm* regs, Uint arity)
return result;
}
+static ERTS_INLINE void reset_active_writer(Process *p)
+{
+ struct erl_off_heap_header* ptr;
+ ptr = MSO(p).first;
+ while (ptr) {
+ if (ptr->thing_word == HEADER_PROC_BIN) {
+ ProcBin *pbp = (ProcBin*) ptr;
+ pbp->flags &= ~PB_ACTIVE_WRITER;
+ }
+ ptr = ptr->next;
+ }
+}
+
/*
* Garbage collect a process.
*
@@ -391,6 +404,7 @@ erts_garbage_collect(Process* p, int need, Eterm* objv, int nobj)
DTRACE2(gc_minor_end, pidbuf, reclaimed_now);
}
}
+ reset_active_writer(p);
/*
* Finish.
@@ -2166,7 +2180,6 @@ link_live_proc_bin(struct shrink_cand_data *shrink,
if (pbp->flags & PB_ACTIVE_WRITER) {
- pbp->flags &= ~PB_ACTIVE_WRITER;
shrink->no_of_active++;
}
else { /* inactive */