]> mj.ucw.cz Git - libucw.git/blobdiff - lib/sorter/s-internal.h
Merge with git+ssh://git.ucw.cz/projects/sherlock/GIT/sherlock.git
[libucw.git] / lib / sorter / s-internal.h
index 5a560b14589bb4c8648cc6ab0a48af8c08d56470..0c39613d45c8642c8fd1186dd5da69ad795b31f3 100644 (file)
@@ -137,7 +137,7 @@ static int P(internal)(struct sort_context *ctx, struct sort_bucket *bin, struct
 #endif
       uns dsize = SORT_DATA_SIZE(key);
       uns recsize = ALIGN_TO(ksize_aligned + dsize, CPU_STRUCT_ALIGN);
-      size_t totalsize = recsize + sizeof(P(internal_item_t) *) + P(internal_workspace)(&key);
+      size_t totalsize = recsize + 2 * P(internal_workspace)(&key);
       if (unlikely(totalsize > remains
 #ifdef CPU_64BIT_POINTERS
                   || item >= item_array + ~0U          // The number of items must fit in an uns
@@ -177,6 +177,9 @@ static int P(internal)(struct sort_context *ctx, struct sort_bucket *bin, struct
     , workspace, bin->hash_bits
 #endif
     );
+  if ((void *)item_array != ctx->big_buf)
+    workspace = ctx->big_buf;
+  last_item = item_array + count;
   ctx->total_int_time += get_timer(&timer);
 
   SORT_XTRACE(5, "s-internal: Writing");