123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186moduleAsync_config=ConfigmoduleBusy_poller=Busy_pollermoduleClock=ClockmoduleDump_core_on_job_delay=Dump_core_on_job_delaymoduleFd=FdmoduleIn_thread=In_threadmoduleIo_stats=Io_statsmoduleIo_uring_raw=Io_uring_rawmoduleIo_uring_raw_singleton=Io_uring_raw_singletonmoduleIo_uring=Io_uringmodulePrint=Async_printmoduleProcess=ProcessmoduleReader=ReadermoduleRequire_explicit_time_source=Require_explicit_time_sourcemoduleScheduler=SchedulermoduleShutdown=ShutdownmoduleSignal=SignalmoduleSocket=Unix_syscalls.SocketmoduleSys=Async_sysmoduleTcp=TcpmoduleThread_safe=Thread_safemoduleWriter=WritermoduleUnix=structmoduleFd=FdincludeUnix_syscalls(** @open *)endletafter=Clock.afterletat=Clock.atletevery=Clock.everyletwith_timeout=Clock.with_timeoutletschedule=Scheduler.scheduleletschedule'=Scheduler.schedule'letshutdown=Shutdown.shutdownletwithin=Scheduler.withinletwithin'=Scheduler.within'(* We rebind all pervasive and some Core functions that deal with I/O so that one
doesn't unintentionally do blocking stuff in an Async program. *)(** Shadow blocking functions in [Core.Printf] to prevent their unintentional use. *)modulePrintf=structlet_shadow=`Probably_should_not_use_blocking_Core_Printf_functions_with_Asyncletbprintf=Core.Printf.bprintfleteprintf=_shadowletexitf=_shadowletfailwithf=Core.Printf.failwithfletfprintf_=_shadowletifprintf_=Core.Printf.ifprintfletinvalid_argf=Core.Printf.invalid_argfletkbprintf=Core.Printf.kbprintfletkfprintf__=_shadowletksprintf=Core.Printf.ksprintfletprintf=_shadowletsprintf=Core.Printf.sprintfendincludestructopenCoremoduleOverwrite_=structletoverwrite1(`This_is_async__Think_about_blockingasx)=xletoverwrite2`This_is_async__Think_about_blocking=overwrite1letoverwrite3`This_is_async__Think_about_blocking=overwrite2letoverwrite4`This_is_async__Think_about_blocking=overwrite3endopenOverwrite_letclose_in_noerr=overwrite1letclose_in=overwrite1letclose_out_noerr=overwrite1letclose_out=overwrite1leteprintf=Print.eprintfletflush_all=overwrite1letflush=overwrite1letfprintf=Print.fprintfletifprintf=Printf.ifprintfletin_channel_length=overwrite1letinput_binary_int=overwrite1letinput_byte=overwrite1letinput_char=overwrite1letinput_line=overwrite1letinput_lines?fix_win_eol:_=overwrite1letinput=overwrite4letinput_value=overwrite1letopen_in_bin=overwrite1letopen_in_gen=overwrite3letopen_in=overwrite1letopen_out_bin=overwrite1letopen_out_gen=overwrite3letopen_out=overwrite1letout_channel_length=overwrite1letoutput_binary_int=overwrite2letoutput_byte=overwrite2letoutput_char=overwrite2letoutput=overwrite4letoutput_string=overwrite2letoutput_value=overwrite2letpos_in=overwrite1letpos_out=overwrite1letprerr_char=Print.prerr_charletprerr_endline=Print.prerr_endlineletprerr_float=Print.prerr_floatletprerr_int=Print.prerr_intletprerr_newline=Print.prerr_newlineletprerr_string=Print.prerr_stringletprint_char=Print.print_charletprint_endline=Print.print_endlineletprint_float=Print.print_floatletprintf=Print.printfletprint_int=Print.print_intletprint_newline=Print.print_newlineletprint_s=Print.print_sletprint_string=Print.print_stringletread_float=overwrite1letread_int=overwrite1letread_line=overwrite1letread_lines=overwrite1letread_wrap?binary:_~f:_=overwrite1letreally_input=overwrite4letseek_in=overwrite2letseek_out=overwrite1letset_binary_mode_in=overwrite2letset_binary_mode_out=overwrite2letwrite_lines=overwrite2letwrite_wrap?binary:_~f:_=overwrite1let(eprint_s[@deprecated"[since 2019-12] If you want to the blocking version, use \
[Core.eprint_s] (this preserves behavior, but is discouraged). If you \
want the nonblocking version, use [eprint_s_nonblocking] or \
[Print.eprint_s]"])=overwrite1;;leteprint_s_nonblocking=Print.eprint_smoduleLargeFile=structletseek_out=overwrite1letpos_out=overwrite1letout_channel_length=overwrite1letseek_in=overwrite1letpos_in=overwrite1letin_channel_length=overwrite1endmoduleSexp:sigincludemoduletypeofstructincludeSexpendvalsave:?perm:int->string->t->unit[@@alertblocking"Use [Writer.save_sexp ~hum:false] to avoid blocking."]valsave_hum:?perm:int->string->t->unit[@@alertblocking"Use [Writer.save_sexp ~hum:true] to avoid blocking."]valsave_mach:?perm:int->string->t->unit[@@alertblocking"Use [Writer.save_sexp ~hum:false] to avoid blocking."]valsave_sexps:?perm:int->string->tlist->unit[@@alertblocking"Use [Writer.save_sexps ~hum:false] to avoid blocking."]valsave_sexps_hum:?perm:int->string->tlist->unit[@@alertblocking"Use [Writer.save_sexps ~hum:true] to avoid blocking."]valsave_sexps_mach:?perm:int->string->tlist->unit[@@alertblocking"Use [Writer.save_sexps ~hum:false] to avoid blocking."]end=Sexpendletexit=Shutdown.exit(**/**)moduleAsync_unix_private=structmoduleBy_descr=By_descrmoduleRaw_fd=Raw_fdmoduleRaw_scheduler=Raw_schedulermoduleSyscall=Syscallend