Thread overview
[Issue 11357] New: Weird behavior of appender with File as the element... do not know exactly where the bug resides.
Oct 25, 2013
Phil Lavoie
Oct 25, 2013
Phil Lavoie
Oct 25, 2013
Phil Lavoie
Oct 25, 2013
Phil Lavoie
October 25, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11357

           Summary: Weird behavior of appender with File as the element...
                    do not know exactly where the bug resides.
           Product: D
           Version: D2
          Platform: x86_64
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: druntime
        AssignedTo: nobody@puremagic.com
        ReportedBy: maidenphil@hotmail.com


--- Comment #0 from Phil Lavoie <maidenphil@hotmail.com> 2013-10-25 13:19:55 PDT ---
So I just found some weird behavior while using std.array.Appender in conjunction with std.stdio.File.

The attachment shows it best but, simply put:
auto app = appender!( File[] )();
foreach( i = 0; i < dontMatter; ++i ) {
  app.put( stdout );
}

Crashes. Of course, my real life needs did not include copying stdout, but rather filling an array with files using the appender.

Phil

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
October 25, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11357



--- Comment #1 from Phil Lavoie <maidenphil@hotmail.com> 2013-10-25 13:22:04 PDT ---
Version of dmd is 2.063.2

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
October 25, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11357



--- Comment #2 from Phil Lavoie <maidenphil@hotmail.com> 2013-10-25 13:23:38 PDT ---
Created an attachment (id=1284)
Run this and it crashes

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
October 25, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11357


monarchdodra@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra@gmail.com


--- Comment #3 from monarchdodra@gmail.com 2013-10-25 14:16:41 PDT ---
Issue is in appender, that doesn't properlly construct objects when inserting them, it merely assign them.

There is an existing pull that already fixes this: https://github.com/D-Programming-Language/phobos/pull/1529

That said, putting things with destructors (such as File) is a *terrible* idea,
as things put inside dynamic arrays are never "finalized" (destroyed). So
basically, you'll never close your files.

Prefer using std.container.Array: Not only does this correctly construct your objects, it will also deterministically manage their lifecycle.

TY for filing the issue.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
October 25, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11357



--- Comment #4 from Phil Lavoie <maidenphil@hotmail.com> 2013-10-25 16:21:01 PDT ---
(In reply to comment #3)
> Issue is in appender, that doesn't properlly construct objects when inserting them, it merely assign them.
> 
> There is an existing pull that already fixes this: https://github.com/D-Programming-Language/phobos/pull/1529
> 
> That said, putting things with destructors (such as File) is a *terrible* idea,
> as things put inside dynamic arrays are never "finalized" (destroyed). So
> basically, you'll never close your files.
> 
> Prefer using std.container.Array: Not only does this correctly construct your objects, it will also deterministically manage their lifecycle.
> 
> TY for filing the issue.

Good to know regarding the never finalized objects/structs. I am thankful for this information. I will give std.container.Array a try, thank you!

Phil

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------