Okay, I am here again.
No lucky, I cannot make it cooperate with the precision GC, even catching
the signal does not work.
The `xform` seems buggy in two ways I have encountered:
1. it may eat some module level non-static constants, say, to export
`syslog` macros 'facilities', 'severities' and  'open flags' as integer,
after `xform`ing the 'open flags' are gone. XFORM_START/END_SKIP will solve
it while *_SUSPEND will not.
2. in the foxpipe.c, XFORM_START/END_SKIP causes contracts error because of
(caar null).

Finally, I redesigned the records that do not depend on any Scheme_Object
and malloc() it as pure data collection. Now the SIGSEGV is out of my
source code. But I get something is worse (Racket Version 6.2.0.5):

core 'core' of 2574:
-----------------  lwp# 1 / thread# 1  --------------------
 fffffd7fff27d3ba _lwp_kill () + a
 fffffd7fff2127b0 raise (6) + 20
 fffffd7fff1ecb98 abort () + 98
 00000000006fb295 ???????? ()
 fffffd7fff276206 __sighndlr () + 6
 fffffd7fff26905b call_user_handler (b, fffffd7fffdf8d48, fffffd7fffdf89e0)
+ 1db
 fffffd7fff2693ce sigacthandler (b, fffffd7fffdf8d48, fffffd7fffdf89e0) +
10e
 --- called from signal handler with signal 11 (SIGSEGV) ---
 fffffd7fff1d9376 memcpy () + 1936
 0000000000702820 propagate_marks () + 120
 0000000000702958 propagate_marks_plus_ephemerons () + 18
 00000000006fdb8a garbage_collect () + 67a
 00000000007009ef collect_now () + 2f
 0000000000705122 GC_malloc_one_small_tagged () + 2b2
 0000000000617561 scheme_make_output_port () + b1
 0000000000630427 scheme_make_byte_string_output_port () + b7
 000000000068579c format () + 6c
 fffffd7ffe7038ef ???????? ()
 fffffd7ffe3f1d6b ???????? ()
 fffffd7ffe7021dd ???????? ()
 fffffd7ffe7021dd ???????? ()
 fffffd7ffe7021dd ???????? ()
 00000000004b5e55 scheme_do_eval () + 1e55
 00000000004cf57d force_values () + cd
 00000000004cf707 _apply_native () + f7
 00000000004dd8e5 scheme_apply_chaperone () + ca5
 00000000004b4a4f scheme_do_eval () + a4f
 00000000004b6c47 _scheme_apply_from_native () + 57
 fffffd7ffe3418d1 ???????? ()
 fffffd7ffe341f5d ???????? ()
 00000000004b5e55 scheme_do_eval () + 1e55
 00000000004b6e37 _scheme_apply_multi_from_native () + 57
 fffffd7ffe710ffc ???????? ()
 00000000004b5e55 scheme_do_eval () + 1e55
 00000000004cbc52 apply_k () + b2
 00000000004d3ce8 scheme_top_level_do_worker () + 828
 00000000006c705f start_child () + 3ef
 00000000006d0c34 make_subprocess () + 204
 00000000006d0e74 scheme_thread_w_details () + e4
 fffffd7fffdfa0a8 ???????? ()
-----------------  lwp# 2 / thread# 2  --------------------
-----------------  lwp# 3 / thread# 3  --------------------
-----------------  lwp# 4 / thread# 4  --------------------
-----------------  lwp# 5 / thread# 5  --------------------
-----------------  lwp# 6 / thread# 6  --------------------
-----------------  lwp# 7 / thread# 7  --------------------
-----------------  lwp# 8 / thread# 8  --------------------

and

core 'core' of 3008: racket -N sakuyamon -t digivice/sakuyamon.rkt -- izuna
gyoudmon.org lo
-----------------  lwp# 1 / thread# 1  --------------------
 fffffd7fff27d3ba _lwp_kill () + a
 fffffd7fff2127b0 raise (6) + 20
 fffffd7fff1ecb98 abort () + 98
 00000000006fb295 ???????? ()
 fffffd7fff276206 __sighndlr () + 6
 fffffd7fff26905b call_user_handler (b, fffffd7fffdf8eb8, fffffd7fffdf8b50)
+ 1db
 fffffd7fff2693ce sigacthandler (b, fffffd7fffdf8eb8, fffffd7fffdf8b50) +
10e
 --- called from signal handler with signal 11 (SIGSEGV) ---
 fffffd7fff1d9376 memcpy () + 1936
 0000000000702820 propagate_marks () + 120
 0000000000702958 propagate_marks_plus_ephemerons () + 18
 00000000006fdb8a garbage_collect () + 67a
 00000000007009ef collect_now () + 2f
 000000000070601a GC_malloc_atomic () + 22a
 000000000050c81b ts_prepare_retry_alloc () + 7b
 fffffd7ffe715901 ???????? ()
 fffffd7ffe7021dd ???????? ()
 fffffd7ffe7021dd ???????? ()
 fffffd7ffe7021dd ???????? ()
 fffffd7ffe7021dd ???????? ()
 00000000004b5e55 scheme_do_eval () + 1e55
 00000000004cf57d force_values () + cd
 00000000004cf707 _apply_native () + f7
 00000000004dd8e5 scheme_apply_chaperone () + ca5
 00000000004b4a4f scheme_do_eval () + a4f
 00000000004b6c47 _scheme_apply_from_native () + 57
 fffffd7ffe3418d1 ???????? ()
 fffffd7ffe341f5d ???????? ()
 00000000004b5e55 scheme_do_eval () + 1e55
 00000000004b6e37 _scheme_apply_multi_from_native () + 57
 fffffd7ffe710ffc ???????? ()
 00000000004b5e55 scheme_do_eval () + 1e55
 00000000004cbc52 apply_k () + b2
 00000000004d3ce8 scheme_top_level_do_worker () + 828
 00000000006c705f start_child () + 3ef
 00000000006d0c34 make_subprocess () + 204
 00000000006d0e74 scheme_thread_w_details () + e4
 fffffd7fffdfa0a8 ???????? ()
-----------------  lwp# 2 / thread# 2  --------------------
-----------------  lwp# 3 / thread# 3  --------------------
-----------------  lwp# 4 / thread# 4  --------------------
-----------------  lwp# 5 / thread# 5  --------------------
-----------------  lwp# 6 / thread# 6  --------------------
-----------------  lwp# 7 / thread# 7  --------------------
-----------------  lwp# 8 / thread# 8  --------------------

Three SSH clients are running in three places separately, all APIs are
FFIed without '#:in-orignal-place'. The GC itself crushed in thread #1. I
do not make subprocess explicitly and the main place is running with
ncurses bindings.

On Fri, Sep 18, 2015 at 3:00 AM, WarGrey Gyoudmon Ju <[email protected]>
wrote:

> Okay, thank you Matthew.
>
> On Thu, Sep 17, 2015 at 10:17 PM, Matthew Flatt <[email protected]>
> wrote:
>
>> At Thu, 17 Sep 2015 21:29:35 +0800, WarGrey Gyoudmon Ju wrote:
>> > On Wed, Sep 16, 2015 at 7:36 PM, Matthew Flatt <[email protected]>
>> wrote:
>> >
>> > > But, also, to use either of those, you need to use "xform" to
>> adjustthe
>> > > C code for GC, or you need to adjust the C code to cooperate
>> explicitly
>> > > with the GC using MZ_GC_DECL_REG(), etc. Are you using "xform"
>> already?
>> > >
>> > >
>> > > More generally, this code looks like something that is more easily
>> > > handled by Racket and `ffi/unsafe`, instead of writing new C code. You
>> > > still have to be aware of GC issues, but not to the same degree.
>> >
>> >
>> >  No, I have not use "xform" yet. This module does work with FFI. It is a
>> > chance to learn Racket more deeply.
>> >
>> > So is explicitly adjust the C code with MZ_GC_DECL_REG() also the right
>> way
>> > to work with realloc(3)?
>>
>> Sorry that I forgot to answer the part about replacing libssh2's
>> allocation functions. I don't think that's going to work at all, since
>> libssh2 doesn't cooperate with the garbage collector.
>>
>> (If it were just a matter of having a scheme_realloc(), you could
>> implement it with scheme_malloc() and memcpy().)
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to