diff options
author | Sverker Eriksson <[email protected]> | 2012-07-05 15:58:22 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2012-07-05 15:58:22 +0200 |
commit | 13fb710888b866830b673d019485ad58756fd23f (patch) | |
tree | 0f0545a0910b07ad1158b171cbdcea64c3df5ade | |
parent | 2d519dc7ff781693451f6432e29fe55864bce482 (diff) | |
parent | 4ce6c4d5618ae8cfb39f8c08fb1cf937fc9db09a (diff) | |
download | otp-13fb710888b866830b673d019485ad58756fd23f.tar.gz otp-13fb710888b866830b673d019485ad58756fd23f.tar.bz2 otp-13fb710888b866830b673d019485ad58756fd23f.zip |
Merge branch 'sverk/opt-inet-tcp-ctrl-proc'
* sverk/opt-inet-tcp-ctrl-proc:
Optimize inet:tcp_controlling_process
erts: Update obsolete HARD_DEBUG code
-rw-r--r-- | erts/emulator/beam/erl_message.c | 48 | ||||
-rw-r--r-- | lib/kernel/src/inet.erl | 10 |
2 files changed, 15 insertions, 43 deletions
diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c index 241d61b868..26bb015070 100644 --- a/erts/emulator/beam/erl_message.c +++ b/erts/emulator/beam/erl_message.c @@ -596,9 +596,7 @@ erts_move_msg_mbuf_to_heap(Eterm** hpp, ErlOffHeap* off_heap, ErlMessage *msg) #endif #ifdef HARD_DEBUG - ProcBin *dbg_mso_start = off_heap->mso; - ErlFunThing *dbg_fun_start = off_heap->funs; - ExternalThing *dbg_external_start = off_heap->externals; + struct erl_off_heap_header* dbg_oh_start = off_heap->first; Eterm dbg_term, dbg_token; ErlHeapFragment *dbg_bp; Uint *dbg_hp, *dbg_thp_start; @@ -772,48 +770,16 @@ copy_done: int i, j; ErlHeapFragment* frag; { - ProcBin *mso = off_heap->mso; + struct erl_off_heap_header* dbg_oh = off_heap->first; i = j = 0; - while (mso != dbg_mso_start) { - mso = mso->next; + while (dbg_oh != dbg_oh_start) { + dbg_oh = dbg_oh->next; i++; } for (frag=bp; frag; frag=frag->next) { - mso = frag->off_heap.mso; - while (mso) { - mso = mso->next; - j++; - } - } - ASSERT(i == j); - } - { - ErlFunThing *fun = off_heap->funs; - i = j = 0; - while (fun != dbg_fun_start) { - fun = fun->next; - i++; - } - for (frag=bp; frag; frag=frag->next) { - fun = frag->off_heap.funs; - while (fun) { - fun = fun->next; - j++; - } - } - ASSERT(i == j); - } - { - ExternalThing *external = off_heap->externals; - i = j = 0; - while (external != dbg_external_start) { - external = external->next; - i++; - } - for (frag=bp; frag; frag=frag->next) { - external = frag->off_heap.externals; - while (external) { - external = external->next; + dbg_oh = frag->off_heap.first; + while (dbg_oh) { + dbg_oh = dbg_oh->next; j++; } } diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index a651e82122..41460c948b 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -1255,7 +1255,10 @@ tcp_controlling_process(S, NewOwner) when is_port(S), is_pid(NewOwner) -> _ -> case prim_inet:getopt(S, active) of {ok, A0} -> - prim_inet:setopt(S, active, false), + case A0 of + false -> ok; + _ -> prim_inet:setopt(S, active, false) + end, case tcp_sync_input(S, NewOwner, false) of true -> %% socket already closed, ok; @@ -1263,7 +1266,10 @@ tcp_controlling_process(S, NewOwner) when is_port(S), is_pid(NewOwner) -> try erlang:port_connect(S, NewOwner) of true -> unlink(S), %% unlink from port - prim_inet:setopt(S, active, A0), + case A0 of + false -> ok; + _ -> prim_inet:setopt(S, active, A0) + end, ok catch error:Reason -> |