-
Notifications
You must be signed in to change notification settings - Fork 177
/
CHANGES
1169 lines (863 loc) · 46.4 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
===== 5.8.0 =====
====== Improvements ======
* Make Lwt_seq.of_list lazier, make Lwt_set.to_list tail-rec. (Samer Abdallah, #1019)
* Convert more Lwt.fail into raise to increase availibility of backtraces. (#1008)
====== Documentation ======
* Small fixes. (Nils André, #1001, #1006)
* Convert manual to mld. (#951, Antonin Décimo)
====== Other ======
* Many improbements to the CI. (Sora Morimoto, Idir Lankri, #986, #1009, #1011, #1013, #1014, #1016, #1020, #1021, #1023, #1024, #1025)
* Improbements to the packaging. (Sora Morimoto, #1010, #1015)
* Make C code pass the stricter checks of GCC 14. (Jerry James, #1004)
* Fix many many C warnings and other fixes. (Antonin Décimo, #1007, #1022)
===== 5.7.0 =====
====== Breaking API changes ======
* Lwt_result.catch now takes a function (unit -> 'a t) rather than a promise ('a t). (#965)
* Remove the deprecated Lwt.result type (use Stdlib.result instead). (#968)
* Remove the deprecated Lwt.make_value and Lwt.make_result functions (use Ok and Error instead). (#968)
* Remove the deprecated and unsafe waiter_of_wakener (keep the waiter around when you create the wakener instead). (#968)
* Remove the deprecated Lwt_stream.on_termination and Lwt_stream.on_terminate (bind to Lwt_stream.closed instead). (#968)
* Remove the deprecated Lwt_stream.result type (use Stdlib.result instead). (#968)
* Remove the deprecated Lwt_stream.map_exn function (use wrap_exn instead). (#968)
====== Additions ======
* Lwt.Exception_filter for enabling/disabling system-exception catching. (#964)
* Lwt.reraise an exception raising function which preserves backtraces, recommended for use in Lwt.catch. (#963)
* Expose Lwt_io.delete_recursively for deleting a directory and its content recursively. (#984, Antonin Décimo)
* Lwt_preemptive.run_in_main_dont_wait to run a function in the main preemptive thread but without waiting for the result. (Kate Deplaix, #960)
* Lwt_unix.handle_signal and Lwt_engine.forwards_signal to allow other IO libraries (such as Eio) to share signal handlers. (Thomas Leonard, #993, #991)
====== Build ======
* Remove unused dependency in dune file. (#969, Kate Deplaix)
* Fix some compilation warnings for C stubs with OCaml 5. (#976, Antonin Décimo)
====== Fixes ======
* Use SA_ONSTACK on OCaml5 to avoid SIGSEGV. (Thomas Leonard, #993, #981)
* Fix race in worker loop. (Thomas Leonard, #993, #994)
* Fix marshall header size in Lwt_io.read_value. (Simmo Saan, #995)
====== Misc ======
* Resolve paused promises only once in main loop. This lets Lwt.pause behave identical to Lwt_unix.yield. (#917, Christopher Zimmermann, Favonia)
===== 5.6.1 =====
====== Fixes ======
* Fix null file descriptor being closed when used as redirection for standard fd of child processes. (#957, Antonin Décimo)
===== 5.6.0 =====
====== Installability ======
* Lwt is now compatible with OCaml 5.00. Lwt is now incompatible with OCaml 4.02. (#925, #923, Kate Deplaix, Patrick Ferris)
* Lwt is now incompatible with OCaml.4.07 and earlier. (#947, Hannes Mehnert, Tim McGilchrist)
* Lwt-unix is now compatible with OCaml 5.0.0. (#953, David Allsopp)
====== Additions ======
* In the Lwt_io module, add `?cloexec:bool` optional arguments to functions that create file descriptors (`pipe`). The `?cloexec` argument is simply forwarded to the wrapped Lwt_unix function. (#872, #911, Antonin Décimo)
* Add Lwt_result.error, Lwt_result.iter, and Lwt_result.iter_error for consistency with Stdlib. (#927, Antonin Décimo)
* Lwt_result.bind_error. (#943, Boning Dong)
* Add ?cloexec parameter to Lwt_io.pipe. (#911, Antonin Décimo)
====== Misc ======
* On Windows, make Lwt_process.create_process duplicate standard handles given to the child process if they're not inheritable, to mimic the behaviour of Unix.create_process. (#909, Antonin Décimo)
* Add missing dependency to `cppo` in lwt-react's opam file. (#946, Rizo I)
* Improve documentation (especially internal links). (#928, Antonin Décimo)
* Fix documentation of infix choose. (#952, Reynir Björnsson)
* Only define OCAML_NAME_SPACE for OCaml<5.0.0. (#929, Antonin Décimo)
* Replace mentions of Pervasives with Stdlib in the doc. (#954, Antonin Décimo)
* Improve deprecation message for auto_yield. (#908, Seb Mondet)
* Fix mirage tutorial link. (#936, Tuomas Lukka)
* Fix issues in opam file. (#937, Andreas Hauptmann)
====== Fixes ======
* Fix win32_spawn leaking dev_null fd in the parent process. (#906, Antonin Décimo)
* Prefer SetHandleInformation to DuplicateHandle in set_close_on_exec for sockets. DuplicateHandle mustn't be used on sockets. (#907, Antonin Décimo)
* Lwt.pick and Lwt.choose select preferentially failed promises as per documentation (#856, #874, Raman Varabets)
* Use the WSA_FLAG_NO_HANDLE_INHERIT on Windows when creating sockets with WSASocket if the cloexec (non-inheritable) parameter is true. Fixes a Windows problem where a child process would inherit a supposedly non-inheritable socket. (#910, Antonin Décimo)
* Fix macOS/arm64 tests which have a 16k page. (#932, Kate Deplaix)
* Fix Lwt_unix.closedir incorrectly checking the return value of closedir(3). (#942, Antonin Décimo)
* Fix custom_operations struct not fully initialized after OCaml 4.08. (Antonin Décimo, #918)
* Fix missing include directive. (#940, Antonin Décimo)
* Fix missing initialisation in Unix stub. (#941, Antonin Décimo)
====== Deprecations ======
* Alias Lwt_result.map_err and Lwt_result.bind_lwt_err to Lwt_result.map_error and Lwt_result.bind_lwt_error for consistency with Stdlib. (#927, Antonin Décimo)
===== 5.5.0 =====
====== Deprecations ======
* Lwt_main.yield and Lwt_unix.yield are deprecated in favor of the generic Lwt.pause, and Lwt_unix.auto_yield is deprecated in favor of the new Lwt_unix.auto_pause. Currently, Lwt_main.run resolves paused promises more frequently than yielded promises; the difference is unintended but existing applications could unintentionally depend on it. (#855, #858, Favonia)
====== Fixes ======
* Use is_blocking in dup and dup2 to fix ENOTSOCK on Windows. (#869, Antonin Décimo)
* Lwt_unix.lstat was incorrectly calling Unix.stat on Win32. Fixes the behavior of Lwt_io.with_temp_dir following symlinks to directories on Win32. (#883, Antonin Décimo)
* Support deleting symlinks on Windows during cleanup of Lwt_io.with_temp_dir. (#886, Antonin Décimo)
* Lwt_react.S.l[2-6]_s used polymorphic equality which could cause errors when handling functional values. (#893, Jérôme Vouillon)
* On Windows, treat ERROR_BROKEN_PIPE on read as zero-read instead of error. See OCaml PR #4790. (#898, Antonin Décimo)
* Fix compilation under MSVC by replacing Noreturn with CAMLnoreturn. (#880, #887, Nicolás Ojeda Bär)
====== Additions ======
* Lwt_bytes.blit_from_string: string complement of Lwt_bytes.blit. (#882, Hugo Heuzard)
* Lwt_seq: a Seq-like data-structure with Lwt delayed nodes. (#836, #842, Zach Shipko)
* Lwt_unix.auto_pause: the replacement of Lwt_unix.auto_yield that uses Lwt.pause instead of Lwt_unix.yield. (#855, #858, Favonia)
* Lwt_stream.return, Lwt_stream.return_lwt: singleton stream constructors. (#864, Boning Dong)
* Add ?to_dir param from Unix.symlink to Lwt_unix.symlink wrapper. (#884, Antonin Décimo)
* Lwt_stream.of_lwt_seq to convert an Lwt-sequence into an Lwt-stream. (#873)
* Support IPv6 (always) and PF_UNIX (with OCaml >= 4.14) socketpair on Windows. (#870, #876, Antonin Décimo, David Allsopp)
* In the Lwt_unix module, add `?cloexec:bool` optional arguments to functions that create file descriptors (`dup`, `dup2`, `pipe`, `pipe_in`, `pipe_out`, `socket`, `socketpair`, `accept`, `accept_n`). The `?cloexec` argument is simply forwarded to the wrapped Unix function (with OCaml >= 4.05, see PR ocaml/ocaml#650), or emulated as best-effort with `Unix.set_close_on_exec` on older OCaml versions. (#327, #847, #872, #901, Antonin Décimo)
* Lwt_domain: helpers for using domainslib from Lwt. (#860, Sudha Parimala)
====== Misc ======
* Code quality improvement: remove an unneeded Obj.magic. (#844, Benoit Montagu)
* On Windows, use the Unicode API in C stubs and functions introduced in OCaml 4.06 to handle Unicode strings. Raise the minimum requirement to OCaml 4.06 (on Windows only). (#843, #903, Antonin Décimo)
* More complete coverage in the CI. (#890, #894, #896, Sora Morimoto)
* Code quality improvement: use exception pattern instead of try-with. (#895, Antonin Décimo)
* Code quality improvement: fix warnings on 4.13. (#899)
===== 5.4.2 =====
====== Bugs fixed ======
* Fix compilation on Windows by providing missing dummy stubs (#868, Andreas Hauptmann, Antonin Décimo).
===== 5.4.1 =====
====== Bugs fixed ======
* Fix Lwt_fmt.stderr to actually point to stderr (#852, #850, Volker Diels-Grabsch).
* Make temporary files created by Lwt_io.with_temp_dir deletable on Windows by removing the RO bit (#849, #861, Antonin Décimo).
* Handle ECONNABORTED in Lwt_io.establish_server* (#829, #830, Reynir Björnsson, Hannes Mehnert).
====== Bugfixes ======
* Fix Lwt_fmt.stderr to actually point to stderr (#852, #850, Volker Diels-Grabsch).
* Lwt_io.establish_server* handles ECONNABORTED (#829, #830, Reynir Björnsson)
===== 5.4.0 (2020-12-16) =====
====== Installability ======
* Support for OCaml 4.12 (#804, #826, Kate Deplaix).
* lwt_ppx now uses ppxlib. This introduce a transitive dependency to OCaml.4.04 (#807, Philippe Veber).
====== Bugfixes ======
* Catch exceptions in Lwt_react.of_stream (#809, Petter A. Urkedal).
* Avoid segfaults in Lwt_unix.tcsetattr (#798, Frédéric Fortier).
====== Additions ======
* fork method in Lwt_engine. This method is a noop in the released engines but it paves the way to a libuv-based engine (#811, Ulrik Strid, Anton Bachin).
* Lwt_main.abandon_yielded_and_paused for use in conjunction with Lwt.fork (#789, Julien Tesson).
* Lwt.wrap_in_cancelable to complete protect and no_cancel (#785).
* Support for IOV_MAX in [Lwt_unix.IO_vectors.system_limit (#801, Pino Toscano).
* Lwt_unix.send_msgto (#805, Antonio Nuno Monteiro).
* Lwt.dont_wait, a more explicit alternative to Lwt.async (#820, François Thiré).
====== Miscellaneous ======
* Avoid double-reversing when traversing lists. This may change the order in which some promises are collected, which may change which of several rejection is arbitrarily selected during concurrent traversal (#784).
* Numerous documentation improvements (including external contributions from Bikal Lem, Sudha Parimala, and Hannes Mehnert).
===== 5.3.0 (2020-04-22) =====
* Add let* and and* in Lwt.Syntax and Lwt_result.Syntax (#775, Rahul Kumar).
* Also add let+ and and+ (#776, Craig Ferguson).
* Add Lwt_result.both (#775, Rahul Kumar).
* Always use libev if detected (#601).
===== 5.2.0 (2020-03-09) =====
* Add Lwt_unix.pread, Lwt_unix.pwrite, and Lwt_unix.pwrite_string (#768,
Pierre Chambart).
* Internally use accept4(2) when available (#769, Pierre Chambart).
* PPX: internally use 4.10 ASTs (#765).
===== 5.1.2 (2020-02-23) =====
====== Bugs fixed ======
* Do not run C exit hooks after failed exec (#764, diagnosed Lucian Wischik).
* discover.ml: don't add flags for missing system libraries (#760, #761, Olaf
Hering).
* discover.ml: don't run the opam binary (#761).
* Warning on 4.10 in lwt_unix_stubs.c (#766).
===== 5.1.1 (2020-01-07) =====
====== Bugs fixed ======
* Exception raised by Lwt_main.run upon call to exit (#758, reported Gal
Schlezinger).
===== 5.1.0 (2019-12-28) =====
====== Additions ======
* Lwt.all (9976f67).
====== Documentation ======
* Add index.mld for nicer odoc output (1059a80, prompted Anurag Soni).
* Link to rwo-lwt from the online manual to make it more discoverable
(4129a22, suggested Anurag Soni).
* Fix doc links in opam files (7617607).
===== 5.0.1 (2019-12-22) =====
====== Bugs fixed ======
* Additional fix for libev detection under esy (#757, Antonio Nuno Monteiro).
===== 5.0.0 (2019-12-15) =====
====== Breaking ======
See #584 for an extended summary and discussion of this release as a whole, or
individual issues for each change specifically.
* The callback passed to Lwt.async must now evaluate to unit Lwt.t, rather
than _ Lwt.t (#603, requested @cfcs).
* Lwt.choose, Lwt.nchoose, Lwt.nchoose_split, Lwt.pick, and Lwt.npick now
raise Invalid_argument if given the empty list (#557, Tim Reinke).
* Catch nested calls to Lwt_main.run (#607, #609, prompted François-René
Rideau).
* Use the new Lwt_unix.IO_vectors in Lwt_unix.recv_msg and Lwt_unix.send_msg
(#594, prompted Marcello Seri).
* Make Lwt_unix.Async_switch a synonym for Lwt_unix.Async_detach (#572).
* Remove the redundant configure.ml (#700).
* PPX: remove support for general [%lwt ...] expressions (#527).
* PPX: remove support for Lwt_log and the -log option (#520).
* PPX: remove the -no-debug option (#528).
====== Bugs fixed ======
* libev detection under esy (#755, Antonio Nuno Monteiro).
===== 4.5.0 (2019-12-15) =====
====== Additions ======
* Implement Lwt_unix.readv and Lwt_unix.writev on Windows using Lwt_unix.read
and Lwt_unix.write (#745, requested Ulrik Strid).
* Implement Lwt_unix.wait4 on Android using Unix.waitpid, as on Windows (#752,
@EduardoRFS).
* LWT_DISCOVER_ARGUMENTS=--verbose flag, passed through environment variable,
for debugging the feature discovery (configuration) process (#740).
====== Bugs fixed ======
* To help with fork, don't call back into Lwt_main at process exit to call Lwt
exit hooks when there are none (#737, prompted Martin Jambon).
* Properly retain references to buffers in Lwt_unix.readv, Lwt_unix.writev,
Lwt_bytes.read, Lwt_bytes.write, and Lwt_bytes.mincore; the references could
be released too early in rare circumstances (#742, prompted Olaf Hering).
* Don't install a SIGCHLD handler when Lwt is linked in but not used (#738,
requested Sam Goldman, additional information Waleed Khan).
* Link with -lpthread on more platforms that support and require the flag
(#748, Olivier Andrieu).
* Fix syntax errors in feature test programs (#748, Olivier Andrieu).
* C warning with OCaml 4.10 (#751, @kit-ty-kate).
====== Miscellaneous ======
* Make tests more reliable (#726, #743, prompted Olaf Hering).
* Fix deprecation annotation on internal API (#735, Antonio Nuno Monteiro).
* Fix broken link in Lwt_mvar docs (#739, reported @tg-x).
* Fix broken links in README (#750, @imbsky).
===== 4.4.0 (2019-10-09) =====
====== Additions ======
* ?suffix argument for Lwt_io.with_temp_file and Lwt_io.open_temp_file (#724,
requested Volker Diels-Grabsch).
* Lwt_io.with_temp_dir and Lwt_io.create_temp_dir (#724, requested Volker
Diels-Grabsch).
====== Changes ======
* Lwt_io.establish_server: increase default backlog from 5 to SOMAXCONN (#731,
suggested Konstantin Olkhovskiy).
* PPX: use OCaml 4.09 ASTs to support recent features (074f679).
* PPX: deprecate let%lwt structure items (#733, prompted Didier Le Botlan).
====== Miscellaneous ======
* Tests now pass in more environments (#721, #722, #725, #729, reported Olaf
Hering).
===== 4.3.1 (2019-09-26) =====
====== Bugs fixed ======
* Lwt clobbered backtraces (#714, 6e855b8, 4694853, reported Volker
Diels-Grabsch).
* Lwt_unix.fork was broken on glibc 2.28 (#704, @ygrek).
* Fix build with musl-gcc (#718, #719, reported Fabian Hemmer).
* Support more Lwt_unix.madvise options (#716, Anton Kochkov).
====== Miscellaneous ======
* Silence configure script (#717, requested Anil Madhavapeddy).
* Greatly sped up CI and tests.
===== 4.3.0 (2019-08-20) =====
====== Planned to break in 5.0.0 ======
For general discussion of breakage in Lwt 5.0.0, see #584. See #293 about how
Lwt announces and does breaking changes.*
* The signature of Lwt.async will change from (unit -> 'a Lwt.t) -> unit to
(unit -> unit Lwt.t) -> unit (#603, prompted @cfcs).
* Lwt_unix.send_msg and Lwt_unix.recv_msg will be changed to take
Lwt_unix.IO_vectors.t instead of Lwt_unix.io_vectors (#702, prompted
Marcello Seri).
* Nesting calls to Lwt_main.run will be forbidden, and will raise an
Failure. Most programs don't do this (#609, prompted François-René Rideau).
* configure.ml will be removed in favor of an improved discover.ml This
affects only users who are configuring Lwt as part of a manual installation
(i.e., not users of opam or esy). See discover.ml for usage (#700).
* Lwt_unix.async_method will have no effect. In practice, it already does
nothing, and has almost no users (#572).
====== Additions ======
* Lwt_process: allow setting working directory for new processes (#694, Thomas
Leonard).
* PPX: use OCaml 4.08 ASTs to support latest features (#697).
* Lwt_io.NumberIO: use compiler intrinsics for better performance (#178,
requested Mauricio Fernandez).
====== Bugs fixed ======
* Race condition in Lwt_react.S.limit (4e592eb).
* Use fallback rule during configuration (#693, Hongchang Wu).
* Fix typos (#688, #692, @Fourchaux).
===== 4.2.1 (2019-04-02) =====
====== Bug fixed ======
* Detect libev correctly when building under esy (#679, Antonio Nuno
Monteiro).
===== 4.2.0 (2019-03-25) =====
====== Additions ======
* Lwt.both (#668, Brendan Long, Jeremy Yallop).
* ppx_let support with open Lwt.Infix (#667, Brendan Long).
* Lwt_stream.of_seq (#646, Hezekiah Carty).
* Lwt_io.is_closed (#635, Andreas Garnaes).
* Lwt_unix.IO_vectors.byte_count (#645, Raphaël Proust).
* Support for higher baud rates in Lwt_unix.tcgetattr and Lwt_unix.tcsetattr
(#678, Frédéric Fortier).
* Replacement functions in Lwt_main for deprecated functions based on
Lwt_sequence (#660).
====== Bugs fixed ======
* 4.08 compatibility (#658).
* Stack overflow in Lwt_stream.iter_p (#432, Varun Kohli).
* Incorrect bounds check in Lwt_bytes.mincore (#627, Cédric Le Moigne).
* Lwt_bytes.mincore will not be available in future releases of OpenBSD (#663,
Kenneth Westerback).
* Missing header in the Android build (#652, Justus Matthiesen).
* Build broken on MSVC (98303de, 85535f7, Dmitry Bely).
* Build broken on OpenBSD (#672, Christopher Zimmermann).
* Lwt_io.of_bytes produces a channel with inaccurate positions (#636, Nathan
Rebours).
* Lwt_io._.read_int behaves incorrectly on 32-bit systems (#671, reported
Dmitry Bely).
* Inaccurate locations for errors related to ;%lwt (#602, @kandu).
* (_ : t) not recognized as a catch-all pattern by the PPX (#640, Florian
Angeletti).
* Race condition in Lwt_react.E.limit (#606, Avni Fatehpuria).
* Premature deallocation in Lwt_react.E.with_finaliser and
Lwt_react.S.with_finaliser (#626, El-Hassan Wanas).
====== Miscellaneous ======
* New tests for Lwt_bytes, portions of Lwt_unix (#619, #621, #628, #630, #673,
Cédric Le Moigne, Anurag Soni).
* Test suite improvements (#656, Dave Parfitt).
* Clarifications for documentation of Lwt.try_bind, Lwt.pick (#648, #650,
Bikal Lem).
* Fixed documentation of Lwt_io.read_line (#657, Yoni Levy).
* Fixed some typos (#611, #613, Rich Neswold).
===== 4.1.0 (2018-06-26) =====
====== Additions ======
* Change license to MIT (#560).
* Lwt_fmt, an Lwt-aware version of Format (#548, Gabriel Radanne).
* Lwt_io.establish_server_with_client_socket (#586).
====== Bugs fixed ======
* Lwt_stream.iter_n: rename ?max_threads argument to ?max_concurrency (#581,
Hezekiah Carty).
* PPX: reject match expressions that have only exception cases (#597, Raphaël
Proust).
====== Miscellaneous ======
* Improvements to Lwt_pool docs (#575, Bobby Priambodo).
* Restore all PPX tests (#590, Jess Smith).
===== 4.0.1 (2018-04-13) =====
====== Bugs fixed ======
* Race condition in worker thread management in Lwt_unix (#569, diagnosed Gabe
Levi).
* Hang in Lwt_unix.read on Windows (#574, #569, 86a6baf, diagnosed Gabe Levi).
* Docs: note that Lwt_io.open_file for writing truncates the file by default
(#570, reported Tóth Róbert).
===== 4.0.0 (2018-03-30) =====
====== Breaking ======
These changes were announced in Lwt 3.1.0 and Lwt 3.2.0. See #453 about smooth
upgrade paths.
* Delete package lwt.ppx. The PPX syntax is in package lwt_ppx since Lwt 3.2.0
(#338).
* Remove >> syntax from the PPX (#495).
* Delete modules Lwt_log, Lwt_daemon, Lwt_log_core, and package lwt.log. These
are in package lwt_log since Lwt 3.2.0, but it is recommended to use
Logs_lwt from the logs library instead (#484, initiated Hannes Mehnert).
* Delete package lwt.preemptive. It is an alias for lwt.unix since Lwt 3.2.0
(#487).
* Delete package lwt.syntax. The Camlp4 syntax is in package lwt_camlp4 since
Lwt 3.2.0 (#370).
* Delete module Lwt_chan, a predecessor of Lwt_io (#441).
* Delete package lwt.simple-top, a predecessor of utop (#371).
* Make resolvers (Lwt.u) contravariant (#458).
====== Planned to break in 5.0.0 ======
* Lwt.pick will raise Invalid_argument on the empty list, instead of returning
a forever-pending promise. Also applies to Lwt.choose, Lwt.npick,
Lwt.nchoose, and Lwt.nchoose_split (#562, Tim Reinke, prompted Hezekiah
Carty).
* Remove translation of [%lwt ...] to Lwt.catch from the PPX (#527).
* Remove -no-debug option from the PPX (#528).
* Remove Lwt_log support from the PPX (#520).
====== Bugs fixed ======
* Lwt_io.file_length now fails with EISDIR when used on a directory (#563,
requested Cedric Cellier).
* Lwt_react.E.limit and Lwt_react.S.limit now working more correctly (#566,
@Freyr666).
====== Miscellaneous ======
* Documentation improvements (#561, Jason Evans).
===== 3.3.0 (2018-03-07) =====
====== Bugs fixed ======
* Restore backtrace support (#554, #556, Gabe Levi).
* Serious logic error that could cause Lwt to hang or crash (#549, reported
@koen-struyve).
* All Lwt_list functions are now tail-recursive (#538, Joseph Thomas).
====== Additions ======
* Support ;%lwt syntax in the PPX (#307, Hezekiah Carty).
* Lwt_stream.iter_n (#312, Hezekiah Carty).
====== Miscellaneous ======
* Testing improvements (#536, #541, @cedlemo).
* Documentation improvements (#544, #546, #547, #553, #559, Daniil Baturin,
Jason Evans, Jess Smith, Milo Turner).
===== 3.2.1 (2018-01-11) =====
Lwt 3.2.1 is released because it still packages lwt.ppx, a deprecated copy of
package lwt_ppx, and the two packages should be kept in sync.
====== Deprecations ======
* All PPX options are deprecated and should not be used (#534).
* The [%lwt ...] PPX syntax should be replaced by Lwt.catch (#534).
====== Fixes ======
* Clean up PPX -help usage message output (#525, Zan Doye).
====== Miscellaneous ======
* More thorough testing (#512, #535, Joseph Thomas).
* Clarification of the C binding (#521, @cedlemo).
===== 3.2.0 (2017-12-19) =====
====== Additions ======
* Lwt_mvar.take_available, Lwt_mvar.is_empty (#459, Hezekiah Carty).
* Lwt_io.open_temp_file, Lwt_io.with_temp_file (#467, Joe Thomas).
* New reference documentation for module Lwt (#469).
* Lwt_pool.clear and ?dispose argument for Lwt_pool.create (#483,
Hezekiah Carty).
* Lwt_pool.wait_queue_length (#493, Jerome Vouillon).
====== Bugs fixed ======
* Lwt.npick never worked (#447, Zack Coker).
* Lwt_pool.use now always calls ?validate on elements (#461, Joe Thomas).
* Better locations generated by the PPX (#470, Fabian Hemmer).
* Keep worker thread count accurate in Lwt_unix when pthread_create fails
(#493, @koen-struyve).
* Leaked exceptions in Lwt_list (#499).
* Memory leak in Lwt_unix.getnameinfo (#503, Hannes Mehnert).
====== Planned to break in 4.0.0 ======
See #453 for details and instructions about planned breakage in Lwt 4.0.0.
* The semantics of Lwt will be adjusted for better exception and stack safety
(#500).
* The PPX will be factored out into its own opam package, lwt_ppx. This
package is installable from opam now, as of Lwt 3.2.0 (#338).
* Similarly, the deprecated Camlp4 syntax will be factored out into
lwt_camlp4, which is installable from opam now (#370).
* Modules Lwt_log, Lwt_log_core, Lwt_log_rules, and Lwt_daemon are being
deprecated and factored out into opam package lwt_log, also installable from
opam now. Use the logs library for logging, in particular module Logs_lwt.
Direct daemonization is deprecated on most platforms (#484, Hannes Mehnert).
* The >> construct from the PPX will be deleted (#471, Raphaël Proust).
* Package lwt.preemptive is being merged into lwt.unix. In 3.2.0,
lwt.preemptive becomes an alias for lwt.unix, and the package name
lwt.preemptive will be deleted in 4.0.0 (#487).
====== Deprecations ======
* Lwt.waiter_of_wakener should not be used, as it can lead to soundness bugs
in future (but not current) Lwt (#458).
* Lwt_sequence was deprecated in Lwt 2.6.0, but it now has a warning attached,
as do Lwt.add_task_r and Lwt.add_task_l, which use it (#361).
* Use of the following functions is discouraged, but they have not yet
received deprecation warnings: Lwt.with_value, Lwt.cancel, Lwt.state,
Lwt.ignore_result (#359, #469).
====== Miscellaneous ======
* Replace references to Camlp4 in the manual with the PPX (#457, Bobby
Priambodo).
* More tests for Lwt_pool (#464, Joe Thomas).
* Expect tests for the PPX (#474, Fabian Hemmer).
===== 3.1.0 (2017-07-19) =====
====== Additions ======
* Port to Jbuilder (#374, Andrew Ray).
* Lwt_io.establish_server_with_client_address (#346, Rudi Grinberg).
* Lwt_unix.getcwd (#403, Raphaël Proust).
====== Planned to break in 4.0.0 ======
* Delete lwt.simple-top (#371).
* Delete Lwt_chan (#441).
====== Fixes ======
* Make Lwt_log functions tail-recursive (#348, Jan Doms).
* Make more of Lwt_list tail-recursive (#347, Jan Doms).
* Improve string messages in exceptions (#368, #382, Jan Doms, Raphaël
Proust).
* Don't call Unix.set_nonblock or Unix.clear_nonblock unnecessarily on
some fds (#356, David Sheets).
* Lwt_unix.sleep and Lwt_unix.timeout returning too early when using
libev (#433, Stijn Devriendt).
* Lwt_sequence.fold_r iterating the wrong way in some cases (#405,
Stijn Devriendt).
* Build conflicts in some cases due to duplicate cst_to_constr
function (#362, Jérémie Dimino).
* Don't use deprecated readdir_r system call (#430, Raphaël Proust).
====== Miscellaneous ======
* The Lwt core, lwt.ml, has been thoroughly refactored and commented
(#354, reviewed Gabriel Radanne, Edwin Török, Raphaël Proust, Jan
Doms, Fabian Hemmer, Sebastien Mondet, Simon Cruanes, Anil
Madhavapeddy, Pierre Chambart, and many others).
* Lots of tests for most of the Lwt core (#339, #389, #392, #440,
#448, #450, Joseph Thomas, Ryan Slade).
* Documentation fixes (including by Joseph Thomas, Raphaël Proust,
Richard Degenne, Stavros Polymenis).
* Contributing documentation (#379).
* Massively adjust whitespace for legibility (#400, #409, #416,
Richard Degenne).
* Improvements to CI (Etienne Millon, Raphael Rafatpanah, Zack Coker,
Yotam Barnoy).
* The additional packages lwt_ssl, lwt_react, lwt_glib get new minor
releases, the change being new Jbuilder build systems (#374, Andrew
Ray).
===== 3.0.0 (2017-04-10) =====
====== Breaking ======
* These changes were originally announced in release 2.7.0 (#308).
* Lwt_engine.libev now has an optional argument for selecting the libev back
end (#269, #294, Jeremy Yallop).
* Lwt_io.establish_server has been changed to make it more difficult to leak
file descriptors (#258, #260).
* Lwt_io.shutdown_server now evaluates to a promise, which completes when the
listening socket's close(2) operation completes (#259).
* Lwt_unix.bind now evaluates to a promise, because the bind(2) system call
can block for Unix domain sockets (#296, requested David Sheets).
* ocamlfind packages lwt.react, lwt.ssl, lwt.glib are replaced by lwt_react,
lwt_ssl, lwt_glib. These have been separate OPAM packages, under those
names, since 2.7.0 (#301).
===== 2.7.1 (2017-04-08) =====
====== Fixes ======
* OCaml 4.05 compatibility (Mauricio Fernandez, #322).
* Give Lwt_unix.file_exists the same semantics as Sys.file_exists, with
respect to not raising Unix.Unix_error (Mauricio Fernandez, #316).
* Improve diagnostics from build scripts (Tim Cuthbertson, #313, #314).
====== Additions ======
* Announce Lwt_result, which was originally released as an experimental module
in release 2.6.0 (Simon Cruanes, #320, #247).
===== 2.7.0 (2017-01-03) =====
====== General ======
* Values of types a Lwt.t are now referred to as promises rather than threads
(#300). The manual has not yet been updated.
====== Breaking ======
* After this release, Lwt will switch to semantic versioning. Future breaking
changes will first require deprecation, then a major version number increase
(#293).
* Lwt no longer supports OCaml 4.01 (#272).
* Lwt_unix.fdatasync is no longer available on macOS. It was calling an
undocumented system call on that system (#285, Jeremy Yallop).
====== Planned to break in 3.0.0 ======
* APIs in this category have deprecation messages attached. The messages will
be displayed if you recompile your code, and can also be seen in #308.
* Lwt_engine.libev will have an argument for selecting the libev back end
(#269, #294, Jeremy Yallop).
* Lwt_io.establish_server will be replaced by a version that makes it
difficult to leak file descriptors (#258, #260).
* Lwt_io.shutdown_server will evaluate to a promise, which indicates when the
close operation completes (#259).
* Lwt_unix.bind will evaluate to a promise, since bind can block for Unix
domain sockets (#296, requested David Sheets).
* ocamlfind packages lwt.react, lwt.ssl, and lwt.glib will be replaced by the
new lwt_react, lwt_ssl, and lwt_glib. These are now distributed in new OPAM
packages with the same names, separately from OPAM package lwt (#301).
====== Additions ======
* Lwt_unix.readv and Lwt_unix.writev - zero-copy scatter/gather I/O
(#291, #299).
* ?fail_on_error argument for Lwt_log.load_rules (#306, Daniil Baturin).
* Lwt_log.level_of_string (#306, Daniil Baturin).
====== Changes ======
* Lwt_stream.of_list, Lwt_stream.of_array, Lwt_stream.of_string now
immediately push all elements into the created streams
(#239, Spiros Eliopoulos).
====== Deprecations ======
* Lwt_stream.map_exn in favor of Lwt_stream.wrap_exn, which uses OCaml's
standard result type (#295).
====== Bugs fixed ======
* Ungraceful failure if directory handle used after Lwt_unix.closedir (#292).
* Buffer overflow in Lwt_unix.readdir and Lwt_unix.readdir_n (#292).
* Unnecessary allocations in Lwt_unix.readdir_n (#292, found Jeremly Yallop).
====== Miscellaneous ======
* Annotate existing deprecations with [@@ocaml.deprecated ...] (5737f5b).
* Improvements to the examples (#288, Rich Neswold).
* Documentation fixes, including by Rich Neswold.
* New tests and various minor internal improvements.
* Run tests in CI with all OCaml warnings enabled (dadb926).
* Much cleaner build output.
* Add scratch/ directory for local use by developers.
===== 2.6.0 (2016-10-27) =====
====== Additions ======
* Lwt_stream.closed and Lwt_stream.is_closed (#223, Spiros Eliopoulos).
* Lwt_switch.with_switch (#256, Thomas Leonard).
* Define 'a Lwt.result as ('a, exn) result (#247, Simon Cruanes).
* Lwt_condition.broadcast_exn (#241, Nicolas Ojeda Bar).
* Lwt_unix.utimes (#193).
====== Bugfixes ======
* Memory leak in Lwt_unix.readdir_n (#229, diagnosed Thomas Leonard).
* Memory leak in Lwt.protected (#56, #181, reported @ygrek, Mauricio
Fernandez).
* Lwt_switch.turn_off hook exception handling (995b704).
* Handling of ENOTCONN when channels passed to handler of
Lwt_io.establish_server are closed (95fb431).
* Duplicate exceptions on implicit close in Lwt_io.with_connection (b1afe45).
* Deadlock in Lwt_main.at_exit (#48, #114, reported Jérôme Vouillon, Vincent
Bernardoff).
* Performance of Lwt_preemptive.detach (#218, #219, Mauricio Fernandez).
* Bad hash functions for libev loops (#146, reported Mark Christiaens).
* Hash of uninitialized data in Lwt_io (#217, reported Jeremy Yallop).
* Update log sections after Lwt_log.load_rules (#188, reported @rand00).
* Print three digits for milliseconds in Lwt_log (#264, Fabian Hemmer).
* Do not truncate Unix job notification ids in C (#277, diagnosed
@stijn-devriendt).
====== Deprecations ======
* Lwt_stream.on_termination: bind on Lwt_stream.closed instead.
* Lwt.make_value, Lwt.make_error: use result's Ok and Error constructors.
* Lwt_pqueue, Lwt_sequence: use min-heaps and linked lists from another
library (#135).
* Pa_lwt, Pa_lwt_log: use Ppx_lwt.
====== Miscellaneous ======
* Update examples to use PPX syntax instead of Camlp4 (#108, Peter Zotov).
* Set up Travis, AppVeyor for testing on Linux, OS X, Cygwin, and MinGW. MSVC
also planned.
* Large amount of local documentation fixes (Hezekiah Carty, Etienne Millon,
Leo Wzukw, Sebastien Mondet, reports by others).
* A bunch of new tests.
===== 2.5.2 (2016-04-25) =====
* Fix compatibility for 4.03 (#227)
* Various documentation fixes (#199,#200,#210)
* Improve wildcard detection in the ppx (#198)
* Fix Lwt_stream: bounded_push#close wake the reader (#201)
* Fix infinite loop with Lwt_stream.choose (#214)
* Fix laziness failure with Lwt_io.common#close (#207)
===== 2.5.1 (2015-12-07) =====
* Lwt_stream.on_terminate -> Lwt_stream.on_termination
* Lwt_unix: handle O_CLOEXEC
* Lwt_log: add OSX syslog path
* Ppx: Improve lwt%match, improve catchall detection
* Add Lwt_unix.file_exists and Lwt_unix.Large_file.file_exists
* Build fixes
===== 2.5.0 (2015-07-03) =====
* API CHANGE: Functions in Lwt_io that were previously using a
~buffer_size argument now takes a ~buffer argument.
* Accept ?buffer argument in Lwt_ssl.{in,out}_channel_of_descr.
* Use newer Ssl bigarray read/write functionality to avoid
allocation in Lwt_ssl.
* Fix non-reentrant function calls (#136)
* IPv4 multicast support.
* Add support for if%lwt in ppx extension.
* Add Lwt.return_some.
* Disable log syntax extension by default in ppx.
Give [-log] as ppx argument to enable it.
* Nanosecond precision for Lwt_unix.stat.
* Minor fixes + documentation improvements.
===== 2.4.8 (2015-03-11) =====
* Fix compilation under Windows (#117, #129)
* Fix Lwt_engine.on_timer (#121)
* Add Lwt_log_core.reset_rules (#123)
* Fixed typos in the documentation (#119, #131)
===== 2.4.7 (2015-01-06) =====
* camlp4 is now optional.
* Add safe_string compliance except for Lwt_ssl (need ocaml-ssl fix).
* Add Lwt.Infix module to open instead of Lwt to have (>>=), etc.
* Add Lwt_list.filter_map_{s,p} functions.
* Add Lwt.fail_{with,invalid_arg} functions.
* Improved Android support.
* Remove deprecated lwt.text and lwt.top libraries.
* Remove deprecated Lwt_signal and Lwt_event modules from
lwt.react.
* Fix #111: try_lwt wrongly warns about unused match case.
* Fix #96: Fix Lwt_react.S.limit and Lwt_react.E.limit.
* Fix #91: Workaround to fix compilation on OSX.
===== 2.4.6 (2014-10-12) =====
* Add a ppx syntax extension
* Add a ?fd argument to
Lwt_io.{open_connection,with_connection,establish_server}.
* Fix stub for getaddrinfo and getprotobyname
* Windows fix: don't throw an exception in the notification handler
if we're shutting down
* Fix include file search in ./configure
* ./configure fixes for windows
* Fix: use sys_exit instead of exit when Unix.execv fails
===== 2.4.5 (2014-04-21) =====
* Lwt_ssl: expand API to allow setting socket options with Ssl
functions
* fix for camlp4 trunk
* support for React 1.0.0
* add Lwt_sequence.find_node_* functions
* Lwt_log: get backtrace early to overcome exns in
Printexc.to_string
* fix potential deadlock in lwt_unix_recv_notifications
* lwt.glib fixes:
- handle HUP
- fix for BSD/OSX
* do not raise an exception in Lwt_log if argv[0] is blank
===== 2.4.4 (2013-10-22) =====
* add Android support
* fix issues in stubs for Lwt_unix jobs
* fix compatibility issue with OCaml 4.01
* fix the stub for ev_timer_init
* add Lwt.log containing Lwt_log_core, the Unix-free part of Lwt_log
* add Lwt_ssl.get_fd
* fix stdout/stderr redirections in Lwt_daemon.daemonize
* add Lwt_list.{map,iter}i{_s,_p}
===== 2.4.3 (2012-12-27) =====
* fix Lwt_ssl.{in,out}_channel_of_descr: shutdown and close the
socket when the channel is closed
===== 2.4.2 (2012-09-28) =====
* fix the stub for Lwt_unix.readdir
* change the default method for Lwt_glib.install
(use the glib main loop by default: more portable)
* ignore invalid file descriptors returned by glib
(like the emulation of select in glib does)
* use environment variables in discover.ml
- use LIBRARY_PATH and C_INCLUDE_PATH for searching headers
- allow to pass flags for a library in <LIB>_CLFAGS and <LIB>_LIBS
* add Lwt_unix.on_signal_full
===== 2.4.1 (2012-08-22) =====
* Add Lwt_stream.on_terminate
* Fix Lwt_gc
* Fix stubs for get_credentials on *BSD
===== 2.4.0 (2012-07-16) =====
* Reimplement Lwt_stream
- much simpler and more efficient
- do not use Weak
- add bounded push streams
* Add Lwt.async
* Add Lwt_preemptive.run_in_main
* Implement Lwt_unix.get_credentials on MacOS X/OpenBSD
* Ensure that on_cancel functions are executed first
* Better implementation of Lwt.cancel with more tests
* Simplify the API for unix jobs
* Better handling of the master lock in libev stubs
* Windows fixes/updates:
- pass -lws2_32 instead of ws2_32.lib if building with mingw
- fix a bug causing Lwt_unix.read/write to block when a socket
is not readable/writable
- port Lwt_process and Lwt_unix.system to Windows
* Compatibility with OCaml 4.00:
- add O_SHARE_DELETE to Lwt_unix.open_flag
- add -package compiler-libs.toplevel for files using Toploop
* Do not use module Sys for signal handling to avoid
OCaml code to be called in a C thread
* Fix Lwt_unix.wrap_syscall: try instead of Lwt.catch
* Fix a dead-lock between lwt_unix_send_notification
and lwt_unix_recv_notifications
* Fix #277: add a function to return the Ssl.socket of a Lwt_ssl.socket
* Fix problems with C libraries detection/linking
===== 2.3.2 (2011-11-04) =====
* Add location informations in logs:
** allow loggers to get the current location through local storage
** pass current location to logging functions
** pass the current location with the syntax extension
* Add Lwt.on_termination
* Add Lwt_unix.reinstall_signal_handler
* Add Lwt_io.flush_all
* Add assert_lwt keyword to the syntax extension
* Add Lwt.wrap
* Add Lwt_glib.iter and Lwt_glib.wakeup
* OCaml 3.13 ready
* Allow to compile without libev support
* Fix bugs in Lwt_io
* Better handling of forks
* Fix many problems on Windows
===== 2.3.1 (2011-07-13) =====
* Fix building of documentation when using the tarball
* Add Lwt_unix.fsync and Lwt_unix.fdatasync
* Fix the stubs for Lwt_unix.send_msg when fd-passing is not
available
* Add -lwt-sequence-strict option to the syntax extension
* Use a custom PRNG state for Lwt.choose and Lwt.pick
* Fix a display glitch when starting the toplevel
* Add Lwt_unix.fork which should now be used when one want to use
Lwt in the child process