Re: Allow code upgrade for the code_server itself

Stavros Aronis <[email protected]>
Newsgroups gmane.comp.lang.erlang.bugs
Message-ID <CABOX0Z-mVVdgcH0Q05fCKiGdDFYzaYyDiD90rTg_BDwsnZ+DMQ@mail.gmail.com>
Hi Siri,

a lot of time has passed indeed, and I have put in place a different kind
of instrumentation, which works for what I want to do. Unfortunately I
currently don't have the time to test again, but I suspect that the issue
remains, for the reasons I explained.

Here is another bug, admittedly unrelated (since I am not trying to update
the code of the code_server *process*):

1) Copied code_server.erl to my home directory and added an
"erlang:display(foo)" call before the single erlang:load_module/1 call in
the module.
2) Run the following:
$ erlc code_server.erl
$ erl -nostick
Erlang/OTP 17 [erts-6.0] [source-07b8f44] [64-bit] [smp:8:8]
[async-threads:10] [hipe] [kernel-poll:false]

Eshell V6.0  (abort with ^G)
1> l(code_server).
{module,code_server}
2> code:which(code_server).
"/home/stavros/code_server.beam"
3> erlang:check_old_code(code_server).
true
4> code:soft_purge(code_server).
true
5> l(te *TAB*
Crash dump was written to: erl_crash.dump
Internal error: Invalid reference count found on #Fun<code_server.0.416>:
 About to erase fun still referred by code.
Aborted

I would expect the soft_purge to fail and the system not to crash.

Regards,

Stavros


On Thu, Jun 19, 2014 at 11:26 AM, Siri Hansen <[email protected]> wrote:

> Hi Stavros, I'm sorry for the very long delay! Are you still struggling
> with this problem or did you find a way around it? Would a code_change
> system message while the process is suspended possibly solve the problem?
> Regards
> /siri
>
>
> 2014-03-10 23:02 GMT+01:00 Stavros Aronis <[email protected]>:
>
>> Hello!
>>
>> I am playing around with code instrumentation and trying to hack the code
>> server so that it applies some transformation whenever it loads *any*
>> module. The hack itself is relatively simple:
>>
>> 1) Instrument and reload any already loaded modules (come to think about
>> it, during this process more modules may be loaded, but let's assume a
>> fixpoint). This is to avoid the case where in order to load A, you have to
>> instrument A, and the instrumenter itself needs a call to X, which is not
>> yet loaded so you have to load X, so you have to instrument X, etc...
>> 2) Get the Core Erlang code of the codeserver and wrap the second
>> argument of erlang:load_module (Line 1264) with a call to my instrumenter
>> (which is a function from binary() -> binary())
>> 3) Load the patched code_server code
>> 4) Move the code_server process from the old code to the new one.
>>
>> I am having trouble with the last step. As far as I understand it, the
>> reason is that the call to system_continue (Line 184) is not qualified, as
>> is the similar call in sys.erl (Line 324).
>>
>> Is there a reason why this is so? Is there any possibility for this to be
>> patched?
>>
>> Cheers,
>>
>> Stavros
>>
>>
>> _______________________________________________
>> erlang-bugs mailing list
>> [email protected]
>> http://erlang.org/mailman/listinfo/erlang-bugs
>>
>>
>

_______________________________________________
erlang-bugs mailing list
[email protected]
http://erlang.org/mailman/listinfo/erlang-bugs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.