26.09.2017 00:34, Mengu пишет:
hi all

this following code block [0] is exiting with "terminated by signal SIGBUS (Misaligned address error)" error. it processes like 200K rows and then fails. any ideas?

void getHotels() {
   import std.parallelism : taskPool;
   import std.functional  : partial;

   auto sunHotels         = new SunHotels();
   auto destinations      = sunHotels.parseDestinations();
   auto conn              = client.lockConnection();
  auto destinationResult = conn.execStatement("SELECT provider_ref, id FROM hotels_destination", ValueFormat.BINARY);
   int[int] destinationIds;

   foreach (row; rangify(destinationResult)) {
    destinationIds[row["provider_ref"].as!PGinteger] = row["id"].as!PGinteger;
   }

   foreach (destination; parallel(destinations)) {
     const string destId = to!string(destination.destinationId);
    const auto destinationFilePath = getcwd() ~ "/ext/data/hotels/" ~ destId ~ ".xml";
     auto xmlFile = new MmFile(destinationFilePath);
     auto fileContents = cast(string)xmlFile[0..xmlFile.length];
     auto hotels = sunHotels.parseHotelsResult(fileContents);
     const destIdInDb = destinationIds[destination.destinationId];
     auto sqls = appender!string;
     writeln("parsing destination: ", destination.destinationName);

     foreach (hotel; parallel(hotels)) {
         sqls.put(hotel.generateSql(destIdInDb).data.join);
     }

     sqls.data.writeln;


     delete fileContents;
     delete xmlFile;
   }

}

this is the full trace i got [1]:

#0  0x0000000000bef5ef in gc.impl.conservative.gc.Gcx.smallAlloc(ubyte, ref ulong, uint) ()
[Current thread is 1 (LWP 100171)]
(gdb) bt full
#0  0x0000000000bef5ef in gc.impl.conservative.gc.Gcx.smallAlloc(ubyte, ref ulong, uint) ()
No symbol table info available.
#1  0x0000000000bf3925 in gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) ()
No symbol table info available.
#2  0x0000000000bed103 in gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) ()
No symbol table info available.
#3  0x0000000000b9c6e3 in gc_qalloc ()
No symbol table info available.
#4  0x0000000000b96140 in core.memory.GC.qalloc(ulong, uint, const(TypeInfo)) ()
No symbol table info available.
#5  0x000000000093fdce in std.array.Appender!(immutable(char)[]).Appender.ensureAddable(ulong) (this=..., nelems=761)     at /home/search-master/dmd2/freebsd/bin64/../../src/phobos/std/array.d:2929
         len = 394
         reqlen = 1155
         newlen = 1155
         u = 0
         overflow = false
         nbytes = 1155
         bi = {base = 0x2b1, size = 140737488337376, attr = 4294949280}
#6  0x0000000000942c0f in std.array.Appender!(immutable(char)[]).Appender.put!(immutable(char)[]).put(immutable(char)[]).bigDataFun(ulong) (
     this=0x7fffffffb9f0, extra=761)
    at /home/search-master/dmd2/freebsd/bin64/../../src/phobos/std/array.d:3023
No locals.
#7  0x0000000000942b55 in std.array.Appender!(immutable(char)[]).Appender.put!(immutable(char)[]).put(immutable(char)[]) (this=...,
---Type <return> to continue, or q <return> to quit---
     at /home/search-master/dmd2/freebsd/bin64/../../src/phobos/std/array.d:3026
         bigData = "'"
         len = 760
         newlen = 34799909888


not big deal probably, but isn't ~32GB enormous value here? I would check why bigDataFun return this.


Reply via email to