| Anonymous | Login | Signup for a new account | 2013-05-19 10:13 CEST | ![]() |
| Main | My View | View Issues | Change Log | Roadmap |
| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | |||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | |||
| 0000150 | OCaml | OCaml general | public | 2000-06-27 21:20 | 2000-07-25 17:36 | |||
| Reporter | administrator | |||||||
| Assigned To | ||||||||
| Priority | normal | Severity | minor | Reproducibility | always | |||
| Status | closed | Resolution | no change required | |||||
| Platform | OS | OS Version | ||||||
| Product Version | ||||||||
| Target Version | Fixed in Version | |||||||
| Summary | 0000150: Unix.write loops forever | |||||||
| Description | Full_Name: Georges Brun-Cottan Version: 2.99 and 3.00 OS: SunOS 5.6 Submission from: los0150.lss.emc.com (168.159.28.150) Problems: On Solaris, writing on a raw device beyond its capacity hangs the process. Recreation: Choose a unused raw device. Issue write above its capacity. Process will hang. Internal Reason: 1) Writing on a raw device beyond its capacity returns 0 (with no error) on Solaris. 2) Caml wraps the Unix write in a loop that terminate either on error or when all requested bytes have been written (write.c:unix_write). The easiest fix would be to suppress the loop, although it might possibly break some existing code relying on the "atomicity" of the write (Is such a code exist? this is not provided by Unix...). | |||||||
| Tags | No tags attached. | |||||||
| Attached Files | ||||||||
Notes |
|
|
(0002133) administrator (administrator) 2000-07-25 17:34 |
Hi Georges, > Problems: > On Solaris, writing on a raw device beyond its capacity hangs the process. > Internal Reason: > 1) Writing on a raw device beyond its capacity returns 0 (with no error) on > Solaris. This is unfortunate, because it doesn't conform with the Single Unix Specification (Unix98): write() should either return a number > 0 if some bytes were written, or the ENOSPC error otherwise. This said, raw disk partitions aren't explicitly covered by the spec, so... > The easiest fix would be to suppress the loop, although it might > possibly break some existing code relying on the "atomicity" of the > write (Is such a code exist? this is not provided by Unix...). The main problem is that Unix.write is declared as returning "unit" rather than "int", so the application wouldn't be informed of a short write. The reason for this and for the loop was to simplify the application, which doesn't have to check for short writes. On the other hand, it's questionable, since when the application gets an ENOSPC error, it doesn't know whether some bytes have been written or not. Thanks for the bug report. I don't promise to fix it immediately, but I'll keep it in mind. - Xavier Leroy |
|
(0002134) administrator (administrator) 2000-07-25 17:36 |
Solaris bug (at least w.r.t. the Single Unix Specification). Still, the type of Unix.write is questionable. |
Issue History |
|||
| Date Modified | Username | Field | Change |
| 2005-11-18 10:13 | administrator | New Issue | |
| Copyright © 2000 - 2011 MantisBT Group |