Mantis Bug Tracker

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000150OCamlOCaml generalpublic2000-06-27 21:202000-07-25 17:36
Reporteradministrator 
Assigned To 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionno change required 
PlatformOSOS Version
Product Version 
Target VersionFixed in Version 
Summary0000150: Unix.write loops forever
DescriptionFull_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...).

TagsNo tags attached.
Attached Files

- Relationships

-  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
Powered by Mantis Bugtracker