1
0
Fork 0

Merging upstream version 1.8.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-24 04:16:09 +01:00
parent 95e76700ee
commit 3ab3342c4f
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
21 changed files with 729 additions and 460 deletions

View file

@ -1,6 +1,6 @@
/* Plzip - Parallel compressor compatible with lzip
/* Plzip - Massively parallel implementation of lzip
Copyright (C) 2009 Laszlo Ersek.
Copyright (C) 2009-2018 Antonio Diaz Diaz.
Copyright (C) 2009-2019 Antonio Diaz Diaz.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -25,7 +25,6 @@
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <string>
#include <vector>
#include <pthread.h>
@ -196,7 +195,7 @@ public:
ocheck_counter( 0 ), owait_counter( 0 ),
receive_id( 0 ), distrib_id( 0 ), deliver_id( 0 ),
slot_tally( slots ), circular_ibuffer( slots ),
circular_obuffer( slots, (Packet *) 0 ),
circular_obuffer( slots, (const Packet *) 0 ),
num_working( workers ), num_slots( slots ), eof( false )
{
xinit_mutex( &imutex ); xinit_cond( &iav_or_eof );
@ -318,7 +317,7 @@ struct Splitter_arg
// courier for packaging and distribution to workers.
extern "C" void * csplitter( void * arg )
{
const Splitter_arg & tmp = *(Splitter_arg *)arg;
const Splitter_arg & tmp = *(const Splitter_arg *)arg;
Packet_courier & courier = *tmp.courier;
const Pretty_print & pp = *tmp.pp;
const int infd = tmp.infd;
@ -364,7 +363,7 @@ struct Worker_arg
// them to courier.
extern "C" void * cworker( void * arg )
{
const Worker_arg & tmp = *(Worker_arg *)arg;
const Worker_arg & tmp = *(const Worker_arg *)arg;
Packet_courier & courier = *tmp.courier;
const Pretty_print & pp = *tmp.pp;
const int dictionary_size = tmp.dictionary_size;
@ -401,18 +400,15 @@ extern "C" void * cworker( void * arg )
int new_pos = 0;
while( true )
{
if( LZ_compress_write_size( encoder ) > 0 )
if( written < packet->size )
{
if( written < packet->size )
{
const int wr = LZ_compress_write( encoder,
packet->data + offset + written,
packet->size - written );
if( wr < 0 ) internal_error( "library error (LZ_compress_write)." );
written += wr;
}
if( written >= packet->size ) LZ_compress_finish( encoder );
const int wr = LZ_compress_write( encoder,
packet->data + offset + written,
packet->size - written );
if( wr < 0 ) internal_error( "library error (LZ_compress_write)." );
written += wr;
}
if( written >= packet->size ) LZ_compress_finish( encoder );
const int rd = LZ_compress_read( encoder, packet->data + new_pos,
offset + written - new_pos );
if( rd < 0 )