Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash after stream starts in 1.3.5, but 1.3.4 is ok #5

Closed
bobstern opened this issue Jan 7, 2019 · 13 comments
Closed

Crash after stream starts in 1.3.5, but 1.3.4 is ok #5

bobstern opened this issue Jan 7, 2019 · 13 comments

Comments

@bobstern
Copy link

bobstern commented Jan 7, 2019

After upgrading liquidsoap to 1.3.5, it crashes as soon as the stream starts. Downgrading to 1.3.4 solved the problem. opam did not downgrade any of the dependencies when downgrading liquidsoap to 1.3.4, so the problem seems to be in liquidsoap itself.

Before liquidsoap crashes, I know it briefly transmits a stream to icecast because icecast runs an “on-connect” script I configured in icecast.

Liquidsoap is launched from a bash script with this command:

~/.opam/default/bin/liquidsoap 'N=getenv("sourceN_env")' \
  'log_path=getenv("log_liquid_env")' 'set("log.level",4)' \
   'set("log.file.path",log_path)' 'set("log.file",true)' \
   'output.icecast(%ogg(%flac(compression=5)),
    input.pulseaudio(device=N, fallible=true),
    fallible=true, host="localhost", port=8000, password="sourcepwd", mount="mystream", 
    format="audio/ogg")'  >/dev/null 2>&1 &

Log output from liquidsoap: (Crashes immediately after last entry.)

2019/01/06 18:48:14 >>> LOG START
2019/01/06 18:48:14 [main:3] Liquidsoap 1.3.5
2019/01/06 18:48:14 [main:3] Using: bytes=[distributed with OCaml 4.02 or above] pcre=7.3.5 dtools=0.4.1 duppy=0.8.0 cry=0.6.2 mm=0.4.0 ogg=0.5.2 flac=0.1.3 flac.ogg=0.1.3 dynlink=[distributed with Ocaml] magic=0.7.3 camomile=1.0.1 inotify=2.1 pulseaudio=0.1.3
2019/01/06 18:48:14 [dynamic.loader:3] Could not find dynamic module for lame encoder.
2019/01/06 18:48:14 [dynamic.loader:3] Could not find dynamic module for fdkaac encoder.
2019/01/06 18:48:14 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
2019/01/06 18:48:14 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2019/01/06 18:48:14 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2019/01/06 18:48:14 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2019/01/06 18:48:14 [video.converter:4] Couldn't find preferred video converter: gavl.
2019/01/06 18:48:14 [audio.converter:4] Couldn't find preferred samplerate converter: libsamplerate.
2019/01/06 18:48:14 [audio.converter:4] Using native samplerate converter
2019/01/06 18:48:14 [threads:3] Created thread "generic queue #1".
2019/01/06 18:48:14 [threads:3] Created thread "generic queue #2".
2019/01/06 18:48:14 [threads:3] Created thread "non-blocking queue #1".
2019/01/06 18:48:14 [threads:3] Created thread "non-blocking queue #2".
2019/01/06 18:48:14 [clock:4] Currently 1 clocks allocated.
2019/01/06 18:48:14 [clock.wallclock_pulse:4] Starting 2 sources...
2019/01/06 18:48:14 [source:4] Source pulse_6027 gets up.
2019/01/06 18:48:14 [clock.wallclock_pulse:4] Delegating clock to active sources.
2019/01/06 18:48:14 [pulse_in(4):4] Activations changed: static=[pulse_in(4)], dynamic=[].
2019/01/06 18:48:14 [pulse_in(4):4] Enabling caching mode: active source.
2019/01/06 18:48:14 [source:4] Source output.icecast_6031 gets up.
2019/01/06 18:48:14 [pulse_in(4):4] Activations changed: static=[mystream:mystream, pulse_in(4)], dynamic=[].
2019/01/06 18:48:14 [mystream:4] Activations changed: static=[mystream], dynamic=[].
2019/01/06 18:48:14 [mystream:4] Enabling caching mode: active source.
2019/01/06 18:48:14 [mystream:3] Connecting mount mystream for source@localhost...
2019/01/06 18:48:14 [mystream:3] Connection setup was successful.
2019/01/06 18:48:14 [threads:3] Created thread "wallclock_pulse" (1 total).
2019/01/06 18:48:14 [clock:4] Main phase starts.
2019/01/06 18:48:14 [clock.wallclock_pulse:3] Streaming loop starts, synchronized by active sources.

Libraries:

opam list
# Packages matching: installed
# Name              # Installed # Synopsis
base                v0.11.1     Full standard library replacement for OCaml
base-bigarray       base
base-bytes          base        Bytes library distributed with the OCaml compile
base-threads        base
base-unix           base
camomile            1.0.1       A Unicode library
conf-libpcre        1           Virtual package relying on a libpcre system inst
conf-m4             1           Virtual package relying on m4
conf-pkg-config     1.1         Virtual package relying on pkg-config installati
cry                 0.6.2       The cry library is an implementation of the shou
dtools              0.4.1       Library providing various helper functions to ma
dune                1.6.2       Fast, portable and opinionated build system
duppy               0.8.0       Library providing monadic threads
flac                0.1.3       Interface for the Free Lossless Audio Codec othe
inotify             2.1         Inotify bindings for ocaml.
jbuilder            transition  This is a transition package, jbuilder is now na
liquidsoap          1.3.5       Swiss-army knife for multimedia streaming
magic               0.7.3       Bindings for libmagic (to determine the type of 
mm                  0.4.0       The mm library contains high-level to create and
ocaml               4.07.1      The OCaml compiler (virtual package)
ocaml-base-compiler 4.07.1      Official release 4.07.1
ocaml-config        1           OCaml Switch Configuration
ocamlbuild          0.12.0      OCamlbuild is a build system with builtin rules 
ocamlfind           1.8.0       A library manager for OCaml
ogg                 0.5.2       Interface for Ogg Bitstream Library, otherwise k
opam-depext         1.1.2       Query and install external dependencies of OPAM 
pcre                7.3.5       Bindings to the Perl Compatibility Regular Expre
pulseaudio          0.1.3       Bindings to Pulseaudio client library
sexplib0            v0.11.0     Library containing the definition of S-expressio
@toots
Copy link
Member

toots commented Jan 7, 2019

Thanks for the effort, this is very helpful.

Would you mind running a gdb stack trace against the crash?

gdb ~/.opam/default/bin/liquidsoap
> run 'N=getenv("sourceN_env")' \
  'log_path=getenv("log_liquid_env")' 'set("log.level",4)' \
   'set("log.file.path",log_path)' 'set("log.file",true)' \
   'output.icecast(%ogg(%flac(compression=5)),
    input.pulseaudio(device=N, fallible=true),
    fallible=true, host="localhost", port=8000, password="sourcepwd", mount="mystream", 
    format="audio/ogg")'
(..crashes..)
> thread apply all bt

Thanks!

@bobstern
Copy link
Author

bobstern commented Jan 7, 2019 via email

@toots
Copy link
Member

toots commented Jan 8, 2019

On osx you should use lldb:

lldb ~/.opam/default/bin/liquidsoap
> r 'N=getenv("sourceN_env")' \
  'log_path=getenv("log_liquid_env")' 'set("log.level",4)' \
   'set("log.file.path",log_path)' 'set("log.file",true)' \
   'output.icecast(%ogg(%flac(compression=5)),
    input.pulseaudio(device=N, fallible=true),
    fallible=true, host="localhost", port=8000, password="sourcepwd", mount="mystream", 
    format="audio/ogg")'
(..crashes..)
> bt all

@bobstern
Copy link
Author

bobstern commented Jan 8, 2019 via email

@toots
Copy link
Member

toots commented Jan 9, 2019

Thanks for this. As I was fearing, the flac encoder is the source of your issue. The implementation for this encoder is tricky, I'll try to revisit it as soon as time allows.

@toots
Copy link
Member

toots commented Jan 9, 2019

Actually, I just realized that there's a list of pending changes on this binding. Any chance you could test with the latest code? Here's how to do it with opam:

git clone --recursive [email protected]:savonet/ocaml-flac.git
cd ocaml-flac
opam pin add .

@savonet-users
Copy link

savonet-users commented Jan 9, 2019 via email

@savonet-users
Copy link

savonet-users commented Jan 9, 2019 via email

@toots toots transferred this issue from savonet/liquidsoap Jan 9, 2019
@bobstern
Copy link
Author

bobstern commented Jan 9, 2019

My success with the dev version of ocaml-flac was short-lived. Liquidsoap 1.3.5 still crashes as soon as the stream begins. (However, 1.3.4 continues to work.)

lldb ~/.opam/default/bin/liquidsoap

(lldb) target create "/Users/bob/.opam/default/bin/liquidsoap"
Current executable set to '/Users/bob/.opam/default/bin/liquidsoap' (x86_64).

(lldb) r 'set("log.level",4)' 'set("log.file.path","/usr/local/hqp_liquidsoap/log/liquidsoap.log")' 'set("log.file",true)' 'output.icecast(%ogg(%flac(compression=5)), input.pulseaudio(device="4", fallible=true), fallible=true, host="localhost", port=8000, password="sourcepwd", mount="mystream", format="audio/ogg")'
Process 23257 launched: '/Users/bob/.opam/default/bin/liquidsoap' (x86_64)
Process 23257 stopped
* thread #2, stop reason = EXC_BAD_ACCESS (code=2, address=0x10238c5d8)
   frame #0: 0x000000010238c5d8
->  0x10238c5d8: movb   $0x1, %al
Target 0: (liquidsoap) stopped.

(lldb) bt all
 thread #1, queue = 'com.apple.main-thread'
   frame #0: 0x00007fff6059003a libsystem_kernel.dylib`__sigwait + 10
   frame #1: 0x00007fff60759ad9 libsystem_pthread.dylib`sigwait + 61
   frame #2: 0x0000000100226caf liquidsoap`caml_wait_signal + 95
   frame #3: 0x00000001001a3910 liquidsoap`camlDtools__wait_signal_2272 + 256
   frame #4: 0x00000001001a3a56 liquidsoap`camlDtools__main_2520 + 278
   frame #5: 0x00000001001a3d58 liquidsoap`camlDtools__catch_2532 + 248
   frame #6: 0x000000010000c819 liquidsoap`camlMain__Make_2438 + 1321
   frame #7: 0x0000000100009e20 liquidsoap`camlRunner__entry + 64
   frame #8: 0x0000000100002999 liquidsoap`caml_program + 4969
   frame #9: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #10: 0x000000010022fe6c liquidsoap`caml_startup_common(argv=0x00007ffeefbff860, pooling=<unavailable>) at startup.c:157 [opt]
   frame #11: 0x000000010022fedb liquidsoap`caml_main [inlined] caml_startup_exn(argv=<unavailable>) at startup.c:162 [opt]
   frame #12: 0x000000010022fed4 liquidsoap`caml_main [inlined] caml_startup(argv=<unavailable>) at startup.c:167 [opt]
   frame #13: 0x000000010022fed4 liquidsoap`caml_main(argv=<unavailable>) at startup.c:174 [opt]
   frame #14: 0x000000010022ff4c liquidsoap`main(argc=<unavailable>, argv=<unavailable>) at main.c:44 [opt]
   frame #15: 0x00007fff6043f015 libdyld.dylib`start + 1
* thread #2, stop reason = EXC_BAD_ACCESS (code=2, address=0x10238c5d8)
 * frame #0: 0x000000010238c5d8
   frame #1: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #2: 0x00000001002493a9 liquidsoap`caml_callback(closure=<unavailable>, arg=<unavailable>) at callback.c:173 [opt]
   frame #3: 0x0000000100216d65 liquidsoap`ogg_enc_write_callback + 597
   frame #4: 0x0000000100834f99 libFLAC.8.dylib`write_bitbuffer_ + 535
   frame #5: 0x0000000100832ce4 libFLAC.8.dylib`init_stream_internal_ + 4409
   frame #6: 0x0000000100831ba5 libFLAC.8.dylib`FLAC__stream_encoder_init_stream + 33
   frame #7: 0x0000000100217036 liquidsoap`ocaml_flac_encoder_ogg_create + 646
   frame #8: 0x00000001001700c0 liquidsoap`camlOgg_flac__create_inner_1966 + 176
   frame #9: 0x000000010003c160 liquidsoap`camlOgg_flac_encoder__get_enc_1642 + 48
   frame #10: 0x000000010003c241 liquidsoap`camlOgg_flac_encoder__header_encoder_1824 + 17
   frame #11: 0x000000010003e3f9 liquidsoap`camlOgg_muxer__register_track_1664 + 361
   frame #12: 0x000000010003d534 liquidsoap`camlOgg_encoder__f_1515 + 52
   frame #13: 0x00000001001c02a1 liquidsoap`camlStdlib__list__iter_1148 + 33
   frame #14: 0x000000010003d483 liquidsoap`camlOgg_encoder__streams_start_1510 + 83
   frame #15: 0x000000010003d5b5 liquidsoap`camlOgg_encoder__encode_1511 + 53
   frame #16: 0x000000010009a0fd liquidsoap`camlOutput__f_2555 + 141
   frame #17: 0x000000010009a161 liquidsoap`camlOutput__fun_2976 + 65
   frame #18: 0x00000001000983d7 liquidsoap`camlOutput__fun_2830 + 503
   frame #19: 0x00000001000fc8fc liquidsoap`camlClock__fun_3328 + 444
   frame #20: 0x00000001001c0358 liquidsoap`camlStdlib__list__fold_left_1162 + 40
   frame #21: 0x00000001000fadd1 liquidsoap`camlClock__fun_3281 + 225
   frame #22: 0x00000001000fdd81 liquidsoap`camlClock__loop_2575 + 785
   frame #23: 0x00000001000fb52d liquidsoap`camlClock__fun_3525 + 749
   frame #24: 0x0000000100122362 liquidsoap`camlTutils__fun_3123 + 802
   frame #25: 0x00000001001b2879 liquidsoap`camlThread__fun_2004 + 137
   frame #26: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #27: 0x0000000100227708 liquidsoap`caml_thread_start + 104
   frame #28: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #29: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #30: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #3
   frame #0: 0x00007fff6058fa16 libsystem_kernel.dylib`__psynch_cvwait + 10
   frame #1: 0x00007fff60758589 libsystem_pthread.dylib`_pthread_cond_wait + 732
   frame #2: 0x0000000100227ffd liquidsoap`caml_condition_wait + 93
   frame #3: 0x00000001001a4ca2 liquidsoap`camlDtools__fun_3957 + 66
   frame #4: 0x00000001001a4aac liquidsoap`camlDtools__mutexify_2889 + 124
   frame #5: 0x00000001001a4c33 liquidsoap`camlDtools__f_2905 + 35
   frame #6: 0x00000001001b2879 liquidsoap`camlThread__fun_2004 + 137
   frame #7: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #8: 0x0000000100227708 liquidsoap`caml_thread_start + 104
   frame #9: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #10: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #11: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #4
   frame #0: 0x00007fff6058fcf2 libsystem_kernel.dylib`__select + 10
   frame #1: 0x000000010022776f liquidsoap`caml_thread_tick + 79
   frame #2: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #3: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #4: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #5
   frame #0: 0x00007fff6058fa16 libsystem_kernel.dylib`__psynch_cvwait + 10
   frame #1: 0x00007fff60758589 libsystem_pthread.dylib`_pthread_cond_wait + 732
   frame #2: 0x0000000100227ffd liquidsoap`caml_condition_wait + 93
   frame #3: 0x000000010019a255 liquidsoap`camlDuppy__run_1617 + 645
   frame #4: 0x000000010019a3fd liquidsoap`camlDuppy__f_1623 + 61
   frame #5: 0x0000000100199f85 liquidsoap`camlDuppy__queue_inner_3876 + 501
   frame #6: 0x0000000100122952 liquidsoap`camlTutils__queue_2366 + 354
   frame #7: 0x0000000100122362 liquidsoap`camlTutils__fun_3123 + 802
   frame #8: 0x00000001001b2879 liquidsoap`camlThread__fun_2004 + 137
   frame #9: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #10: 0x0000000100227708 liquidsoap`caml_thread_start + 104
   frame #11: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #12: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #13: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #6
   frame #0: 0x00007fff6059109a libsystem_kernel.dylib`poll + 10
   frame #1: 0x00000001002230d4 liquidsoap`caml_poll(_read=15, _write=3068, _err=3068, _timeout=<unavailable>) at duppy_stubs.c:95 [opt]
   frame #2: 0x0000000100198730 liquidsoap`camlDuppy__poll_1215 + 80
   frame #3: 0x0000000100199944 liquidsoap`camlDuppy__f_1540 + 644
   frame #4: 0x0000000100199484 liquidsoap`camlDuppy__process_1531 + 228
   frame #5: 0x000000010019a1b7 liquidsoap`camlDuppy__run_1617 + 487
   frame #6: 0x000000010019a3fd liquidsoap`camlDuppy__f_1623 + 61
   frame #7: 0x0000000100199f85 liquidsoap`camlDuppy__queue_inner_3876 + 501
   frame #8: 0x0000000100122952 liquidsoap`camlTutils__queue_2366 + 354
   frame #9: 0x0000000100122362 liquidsoap`camlTutils__fun_3123 + 802
   frame #10: 0x00000001001b2879 liquidsoap`camlThread__fun_2004 + 137
   frame #11: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #12: 0x0000000100227708 liquidsoap`caml_thread_start + 104
   frame #13: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #14: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #15: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #7
   frame #0: 0x00007fff6058fa16 libsystem_kernel.dylib`__psynch_cvwait + 10
   frame #1: 0x00007fff60758589 libsystem_pthread.dylib`_pthread_cond_wait + 732
   frame #2: 0x0000000100227ffd liquidsoap`caml_condition_wait + 93
   frame #3: 0x000000010019a255 liquidsoap`camlDuppy__run_1617 + 645
   frame #4: 0x000000010019a3fd liquidsoap`camlDuppy__f_1623 + 61
   frame #5: 0x0000000100199f85 liquidsoap`camlDuppy__queue_inner_3876 + 501
   frame #6: 0x000000010012290f liquidsoap`camlTutils__queue_2366 + 287
   frame #7: 0x0000000100122362 liquidsoap`camlTutils__fun_3123 + 802
   frame #8: 0x00000001001b2879 liquidsoap`camlThread__fun_2004 + 137
   frame #9: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #10: 0x0000000100227708 liquidsoap`caml_thread_start + 104
   frame #11: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #12: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #13: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #8
   frame #0: 0x00007fff6058fa16 libsystem_kernel.dylib`__psynch_cvwait + 10
   frame #1: 0x00007fff60758589 libsystem_pthread.dylib`_pthread_cond_wait + 732
   frame #2: 0x0000000100227ffd liquidsoap`caml_condition_wait + 93
   frame #3: 0x000000010019a255 liquidsoap`camlDuppy__run_1617 + 645
   frame #4: 0x000000010019a3fd liquidsoap`camlDuppy__f_1623 + 61
   frame #5: 0x0000000100199f85 liquidsoap`camlDuppy__queue_inner_3876 + 501
   frame #6: 0x000000010012290f liquidsoap`camlTutils__queue_2366 + 287
   frame #7: 0x0000000100122362 liquidsoap`camlTutils__fun_3123 + 802
   frame #8: 0x00000001001b2879 liquidsoap`camlThread__fun_2004 + 137
   frame #9: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #10: 0x0000000100227708 liquidsoap`caml_thread_start + 104
   frame #11: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #12: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #13: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #9
   frame #0: 0x00007fff6058fa16 libsystem_kernel.dylib`__psynch_cvwait + 10
   frame #1: 0x00007fff60758589 libsystem_pthread.dylib`_pthread_cond_wait + 732
   frame #2: 0x0000000100227ffd liquidsoap`caml_condition_wait + 93
   frame #3: 0x000000010012340a liquidsoap`camlTutils__fun_3267 + 58
   frame #4: 0x0000000100121b9c liquidsoap`camlTutils__mutexify_1007 + 108
   frame #5: 0x00000001001a3c49 liquidsoap`camlDtools__thread_2525 + 233
   frame #6: 0x00000001001b2879 liquidsoap`camlThread__fun_2004 + 137
   frame #7: 0x0000000100251ab4 liquidsoap`caml_start_program + 92
   frame #8: 0x0000000100227708 liquidsoap`caml_thread_start + 104
   frame #9: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #10: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #11: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13
 thread #10, name = 'threaded-ml'
   frame #0: 0x00007fff6058fcf2 libsystem_kernel.dylib`__select + 10
   frame #1: 0x00000001008f01c2 libpulsecommon-12.2.dylib`pa_poll + 430
   frame #2: 0x00000001007d20a3 libpulse.0.dylib`poll_func + 54
   frame #3: 0x00000001007c3ef0 libpulse.0.dylib`pa_mainloop_poll + 240
   frame #4: 0x00000001007c4447 libpulse.0.dylib`pa_mainloop_iterate + 46
   frame #5: 0x00000001007c44dc libpulse.0.dylib`pa_mainloop_run + 29
   frame #6: 0x00000001007d2437 libpulse.0.dylib`thread + 111
   frame #7: 0x00000001008f0f01 libpulsecommon-12.2.dylib`internal_thread_func + 79
   frame #8: 0x00007fff60757661 libsystem_pthread.dylib`_pthread_body + 340
   frame #9: 0x00007fff6075750d libsystem_pthread.dylib`_pthread_start + 377
   frame #10: 0x00007fff60756bf9 libsystem_pthread.dylib`thread_start + 13

@toots
Copy link
Member

toots commented Jan 10, 2019

Ok, I can reproduce! Stay tuned..

@toots
Copy link
Member

toots commented Jan 10, 2019

Ok, last commit should have fixed it. Mind trying?

@bobstern
Copy link
Author

bobstern commented Jan 10, 2019 via email

@toots
Copy link
Member

toots commented Jan 10, 2019

Ok, thanks for your patience. This is all fixed now, will release the binding shortly.

@toots toots closed this as completed Jan 10, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants