Merging upstream version 1.1~pre1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
19bde4a70f
commit
8871145941
17 changed files with 356 additions and 277 deletions
|
@ -1,4 +1,4 @@
|
|||
/* Plzip - A parallel compressor compatible with lzip
|
||||
/* Plzip - Parallel compressor compatible with lzip
|
||||
Copyright (C) 2009 Laszlo Ersek.
|
||||
Copyright (C) 2009, 2010, 2011, 2012, 2013 Antonio Diaz Diaz.
|
||||
|
||||
|
@ -122,7 +122,7 @@ extern "C" void * dworker( void * arg )
|
|||
LZ_Decoder * const decoder = LZ_decompress_open();
|
||||
if( !ibuffer || !obuffer || !decoder ||
|
||||
LZ_decompress_errno( decoder ) != LZ_ok )
|
||||
{ pp( "Not enough memory" ); fatal(); }
|
||||
{ pp( "Not enough memory" ); cleanup_and_fail(); }
|
||||
|
||||
for( int i = worker_id; i < file_index.members(); i += num_workers )
|
||||
{
|
||||
|
@ -140,7 +140,7 @@ extern "C" void * dworker( void * arg )
|
|||
if( size > 0 )
|
||||
{
|
||||
if( preadblock( infd, ibuffer, size, member_pos ) != size )
|
||||
{ pp(); show_error( "Read error", errno ); fatal(); }
|
||||
{ pp(); show_error( "Read error", errno ); cleanup_and_fail(); }
|
||||
member_pos += size;
|
||||
member_rest -= size;
|
||||
if( LZ_decompress_write( decoder, ibuffer, size ) != size )
|
||||
|
@ -152,7 +152,7 @@ extern "C" void * dworker( void * arg )
|
|||
{
|
||||
const int rd = LZ_decompress_read( decoder, obuffer, buffer_size );
|
||||
if( rd < 0 )
|
||||
fatal( decompress_read_error( decoder, pp, worker_id ) );
|
||||
cleanup_and_fail( decompress_read_error( decoder, pp, worker_id ) );
|
||||
if( rd > 0 && outfd >= 0 )
|
||||
{
|
||||
const int wr = pwriteblock( outfd, obuffer, rd, data_pos );
|
||||
|
@ -162,7 +162,7 @@ extern "C" void * dworker( void * arg )
|
|||
if( verbosity >= 0 )
|
||||
std::fprintf( stderr, "Write error in worker %d: %s\n",
|
||||
worker_id, std::strerror( errno ) );
|
||||
fatal();
|
||||
cleanup_and_fail();
|
||||
}
|
||||
}
|
||||
if( rd > 0 )
|
||||
|
@ -184,9 +184,9 @@ extern "C" void * dworker( void * arg )
|
|||
|
||||
delete[] obuffer; delete[] ibuffer;
|
||||
if( LZ_decompress_member_position( decoder ) != 0 )
|
||||
{ pp( "Error, some data remains in decoder" ); fatal(); }
|
||||
{ pp( "Error, some data remains in decoder" ); cleanup_and_fail(); }
|
||||
if( LZ_decompress_close( decoder ) < 0 )
|
||||
{ pp( "LZ_decompress_close failed" ); fatal(); }
|
||||
{ pp( "LZ_decompress_close failed" ); cleanup_and_fail(); }
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -208,7 +208,7 @@ int decompress( int num_workers, const int infd, const int outfd,
|
|||
return dec_stream( num_workers, infd, outfd, pp, debug_level, testing );
|
||||
}
|
||||
if( file_index.retval() != 0 )
|
||||
{ show_error( file_index.error().c_str() ); return file_index.retval(); }
|
||||
{ pp( file_index.error().c_str() ); return file_index.retval(); }
|
||||
|
||||
if( num_workers > file_index.members() )
|
||||
num_workers = file_index.members();
|
||||
|
@ -224,7 +224,7 @@ int decompress( int num_workers, const int infd, const int outfd,
|
|||
Worker_arg * worker_args = new( std::nothrow ) Worker_arg[num_workers];
|
||||
pthread_t * worker_threads = new( std::nothrow ) pthread_t[num_workers];
|
||||
if( !worker_args || !worker_threads )
|
||||
{ pp( "Not enough memory" ); fatal(); }
|
||||
{ pp( "Not enough memory" ); cleanup_and_fail(); }
|
||||
for( int i = 0; i < num_workers; ++i )
|
||||
{
|
||||
worker_args[i].file_index = &file_index;
|
||||
|
@ -236,14 +236,14 @@ int decompress( int num_workers, const int infd, const int outfd,
|
|||
const int errcode =
|
||||
pthread_create( &worker_threads[i], 0, dworker, &worker_args[i] );
|
||||
if( errcode )
|
||||
{ show_error( "Can't create worker threads", errcode ); fatal(); }
|
||||
{ show_error( "Can't create worker threads", errcode ); cleanup_and_fail(); }
|
||||
}
|
||||
|
||||
for( int i = num_workers - 1; i >= 0; --i )
|
||||
{
|
||||
const int errcode = pthread_join( worker_threads[i], 0 );
|
||||
if( errcode )
|
||||
{ show_error( "Can't join worker threads", errcode ); fatal(); }
|
||||
{ show_error( "Can't join worker threads", errcode ); cleanup_and_fail(); }
|
||||
}
|
||||
delete[] worker_threads;
|
||||
delete[] worker_args;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue