segfault on gc.impl.conservative.gc.Gcx.smallAlloc

Mengu mengukagan at gmail.com
Mon Sep 25 21:34:40 UTC 2017


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
#8  0x000000000093e80a in hotel.Hotel.generateSql(int) (this=..., 
destinationId=5743) at source/hotel.d:216
         sqls = {_data = 0x81d5ca6c0}
         sql = {_data = 0x81d5ca6e0}
         childSqls = {_data = 0x81d5ca700}
#9  0x00000000009194c9 in app.getHotels().__foreachbody1(ref 
destination.Destination).__foreachbody2(ref hotel.Hotel) 
(this=0x7fffffffd2a0,
     __applyArg0=...) at source/app.d:211
         hotel = {provider_ref = 121475, destinationId = 7931, 
resortId = 11313, transfer = 0, roomTypes = {{rooms = {{roomType 
= 0x81a351188,
                       hotelId = 121475, roomId = 5369802, beds = 
2, extrabeds = 0, meals = 0x0}}, roomType = "Twin/Double room",
                 roomTypeId = 21}, {rooms = {{roomType = 
0x81a35c108, hotelId = 121475, roomId = 5761375, beds = 2, 
extrabeds = 0,
                       meals = 0x0}}, roomType = "Double room 
Queen bed", roomTypeId = 2651}}, reviews = 0x0, distance = 
nan(0xc000000000000),
           type = "Hotel", name = "Best Western Carriage House Inn 
and Suites", addr_1 = "1936 Highway 45 Bypass", addr_2 = 0x0,
           zip_code = "38305", city = "Jackson", state = "TN", 
country = "United States", country_code = "US",
           address = "1936 Highway 45 Bypass  38305 Jackson TN 
United States",
           mapurl = 
"http://www.sunhotels.net/GoogleMaps/showGoogleMap.asp?hotelId=121475&cc=en",
           headline = "With a stay at Best Western Carriage House 
Inn & Suites in Jackson, you'll be minutes from Casey Jones 
Village and close to Old Hickory Mall",
           description = "With a stay at Best Western Carriage 
House Inn & Suites in Jackson, you'll be minutes from Casey Jones 
Village and close to Old Hickory Mall.  This hotel is within the 
vicinity of International Rock-A"..., resort = "Jackson", 
destination = "Jackson (TN)",
           images = {{hotelId = 121475, id = 2378342}, {hotelId = 
121475, id = 2378343}, {hotelId = 121475, id = 2378344}, {hotelId 
= 121475,
                 id = 2378345}, {hotelId = 121475, id = 2378347}, 
{hotelId = 121475, id = 2378348}, {hotelId = 121475, id = 
2378349}, {
                 hotelId = 121475, id = 2378350}, {hotelId = 
121475, id = 2378351}, {hotelId = 121475, id = 2378352}, {hotelId 
= 121475,
                 id = 2378353}, {hotelId = 121475, id = 2378354}, 
{hotelId = 121475, id = 2378355}, {hotelId = 121475, id = 
2378356}, {
                 hotelId = 121475, id = 2378357}, {hotelId = 
121475, id = 2378359}, {hotelId = 121475, id = 2378360}, {hotelId 
= 121475,
                 id = 2378362}, {hotelId = 121475, id = 2378363}, 
{hotelId = 121475, id = 2378364}, {hotelId = 121475, id = 
2378365}, {
                 hotelId = 121475, id = 2378366}, {hotelId = 
121475, id = 2378368}, {hotelId = 121475, id = 2378369}, {hotelId 
= 121475,
                 id = 2378371}, {hotelId = 121475, id = 2378379}, 
{hotelId = 121475, id = 2378386}, {hotelId = 121475, id = 
2378389}, {
                 hotelId = 121475, id = 2378395}}, classification 
= "2", features = 0x0, timezone = "-06:00", latitude = 
"35.660888671875",
           longitude = "-88.853157043457031"}
#10 0x0000000000925c54 in 
std.parallelism.ParallelForeach!(hotel.Hotel[]).ParallelForeach.opApply(scope int(ref hotel.Hotel) delegate).doIt() (
     this=0x7fffffffd0d0) at 
/home/search-master/dmd2/freebsd/bin64/../../src/phobos/std/parallelism.d-mixin-3824:3870
         myUnitIndex = 3
         start = 3
         end = 4
---Type <return> to continue, or q <return> to quit---
         __key6543 = 3
         __limit6544 = 4
         i = 3
         __EAX = 0x81d5d4800
         __EDX = 1730176101
         __handler = 7
         __exception_object = 0x6
#11 0x0000000000bbe328 in std.parallelism.run!(void() 
delegate).run(void() delegate) ()
No symbol table info available.
#12 0x0000000000bbde88 in 
std.parallelism.Task!(std.parallelism.run, void() 
delegate).Task.impl(void*) ()
No symbol table info available.
#13 0x0000000000c121fb in std.parallelism.AbstractTask.job() ()
No symbol table info available.
#14 0x0000000000bbdb60 in 
std.parallelism.submitAndExecute(std.parallelism.TaskPool, scope 
void() delegate) ()
No symbol table info available.
#15 0x0000000000925b5a in 
std.parallelism.ParallelForeach!(hotel.Hotel[]).ParallelForeach.opApply(scope int(ref hotel.Hotel) delegate) (
     this=..., dg=...) at 
/home/search-master/dmd2/freebsd/bin64/../../src/phobos/std/parallelism.d-mixin-3824:3876
         workUnitIndex = 5
         len = 26
         shouldContinue = true

[0] https://pastebin.com/JmsTKU95
[1] https://pastebin.com/v1Yufz7g


More information about the Digitalmars-d-learn mailing list