Changeset 8912


Ignore:
Timestamp:
Aug 13, 2009, 5:25:26 PM (12 years ago)
Author:
charles
Message:

(trunk libT) fix #2332: filesystem-based error messages lack context

Location:
trunk/libtransmission
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/inout.c

    r8903 r8912  
    156156/* returns 0 on success, or an errno on failure */
    157157static int
    158 readOrWritePiece( const tr_torrent * tor,
     158readOrWritePiece( tr_torrent      * tor,
    159159                  int                ioMode,
    160160                  tr_piece_index_t   pieceIndex,
    161161                  uint32_t           pieceOffset,
    162                   uint8_t *          buf,
     162                  uint8_t          * buf,
    163163                  size_t             buflen )
    164164{
     
    186186        ++fileIndex;
    187187        fileOffset = 0;
     188
     189        if( err ) {
     190            char * path = tr_buildPath( tor->downloadDir, file->name, NULL );
     191            tr_torrentSetLocalError( tor, "%s (%s)", tr_strerror( err ), path );
     192            tr_free( path );
     193        }
    188194    }
    189195
     
    192198
    193199int
    194 tr_ioRead( const tr_torrent * tor,
     200tr_ioRead( tr_torrent      * tor,
    195201           tr_piece_index_t   pieceIndex,
    196202           uint32_t           begin,
    197203           uint32_t           len,
    198            uint8_t *          buf )
     204           uint8_t          * buf )
    199205{
    200206    return readOrWritePiece( tor, TR_IO_READ, pieceIndex, begin, buf, len );
     
    202208
    203209int
    204 tr_ioWrite( const tr_torrent * tor,
     210tr_ioWrite( tr_torrent      * tor,
    205211            tr_piece_index_t   pieceIndex,
    206212            uint32_t           begin,
    207213            uint32_t           len,
    208             const uint8_t *    buf )
     214            const uint8_t    * buf )
    209215{
    210216    return readOrWritePiece( tor, TR_IO_WRITE, pieceIndex, begin,
     
    218224
    219225static tr_bool
    220 recalculateHash( const tr_torrent * tor,
     226recalculateHash( tr_torrent      * tor,
    221227                 tr_piece_index_t   pieceIndex,
    222228                 void             * buffer,
    223229                 size_t             buflen,
    224                  uint8_t *          setme )
     230                 uint8_t          * setme )
    225231{
    226232    size_t   bytesLeft;
     
    264270
    265271tr_bool
    266 tr_ioTestPiece( const tr_torrent  * tor,
     272tr_ioTestPiece( tr_torrent        * tor,
    267273                tr_piece_index_t    pieceIndex,
    268274                void              * buffer,
  • trunk/libtransmission/inout.h

    r8903 r8912  
    2929 * @return 0 on success, or an errno value on failure.
    3030 */
    31 int tr_ioRead( const struct tr_torrent * tor,
    32                tr_piece_index_t          pieceIndex,
    33                uint32_t                  offset,
    34                uint32_t                  len,
    35                uint8_t *                setme );
     31int tr_ioRead( struct tr_torrent  * tor,
     32               tr_piece_index_t      pieceIndex,
     33               uint32_t              offset,
     34               uint32_t              len,
     35               uint8_t             * setme );
    3636
    3737/**
     
    3939 * @return 0 on success, or an errno value on failure.
    4040 */
    41 int tr_ioWrite( const struct tr_torrent * tor,
    42                 tr_piece_index_t          pieceIndex,
    43                 uint32_t                  offset,
    44                 uint32_t                  len,
    45                 const uint8_t *          writeme );
     41int tr_ioWrite( struct tr_torrent * tor,
     42                tr_piece_index_t     pieceIndex,
     43                uint32_t             offset,
     44                uint32_t             len,
     45                const uint8_t      * writeme );
    4646
    4747/**
     
    5252 *                       tor->info.pieceSize bytes.
    5353 */
    54 tr_bool tr_ioTestPiece( const tr_torrent * tor,
     54tr_bool tr_ioTestPiece( tr_torrent      * tor,
    5555                        tr_piece_index_t   piece,
    5656                        void             * optionalBuffer,
  • trunk/libtransmission/peer-mgr.c

    r8889 r8912  
    11651165
    11661166        case TR_PEER_ERROR:
    1167             if( e->err == EINVAL )
    1168             {
    1169                 addStrike( t, peer );
    1170                 peer->doPurge = 1;
    1171                 tordbg( t, "setting %s doPurge flag because we got an EINVAL error", tr_peerIoAddrStr( &peer->addr, peer->port ) );
    1172             }
    1173             else if( ( e->err == ERANGE )
    1174                   || ( e->err == EMSGSIZE )
    1175                   || ( e->err == ENOTCONN ) )
     1167            if( ( e->err == ERANGE ) || ( e->err == EMSGSIZE ) || ( e->err == ENOTCONN ) )
    11761168            {
    11771169                /* some protocol error from the peer */
    11781170                peer->doPurge = 1;
    1179                 tordbg( t, "setting %s doPurge flag because we got an ERANGE, EMSGSIZE, or ENOTCONN error", tr_peerIoAddrStr( &peer->addr, peer->port ) );
     1171                tordbg( t, "setting %s doPurge flag because we got an ERANGE, EMSGSIZE, or ENOTCONN error",
     1172                        tr_peerIoAddrStr( &peer->addr, peer->port ) );
    11801173            }
    1181             else /* a local error, such as an IO error */
     1174            else
    11821175            {
    1183                 t->tor->error = TR_STAT_LOCAL_ERROR;
    1184                 tr_strlcpy( t->tor->errorString,
    1185                             tr_strerror( e->err ),
    1186                             sizeof( t->tor->errorString ) );
    1187                 tr_torrentStop( t->tor );
     1176                tordbg( t, "unhandled error: %s", tr_strerror( e->err ) );
    11881177            }
    11891178            break;
     
    26162605    }
    26172606
     2607    /* possibly stop torrents that have an error */
     2608    tor = NULL;
     2609    while(( tor = tr_torrentNext( mgr->session, tor )))
     2610        if( tor->isRunning && (( tor->error == TR_STAT_TRACKER_ERROR ) || ( tor->error == TR_STAT_LOCAL_ERROR )))
     2611            tr_torrentStop( tor );
     2612
    26182613    managerUnlock( mgr );
    26192614    return TRUE;
  • trunk/libtransmission/peer-msgs.c

    r8889 r8912  
    13481348        req->length = 0;
    13491349        msgs->state = AWAITING_BT_LENGTH;
    1350         if( !err )
    1351             return READ_NOW;
    1352         else {
    1353             fireError( msgs, err );
    1354             return READ_ERR;
    1355         }
     1350        return err ? READ_ERR : READ_NOW;
    13561351    }
    13571352}
     
    17651760            if( err )
    17661761            {
    1767                 fireError( msgs, err );
    17681762                bytesWritten = 0;
    17691763                msgs = NULL;
  • trunk/libtransmission/torrent.c

    r8910 r8912  
    1919#include <limits.h> /* INT_MAX */
    2020#include <math.h> /* fabs */
     21#include <stdarg.h>
    2122#include <string.h> /* memcmp */
    2223#include <stdlib.h> /* qsort */
     
    263264***/
    264265
     266void
     267tr_torrentSetLocalError( tr_torrent * tor, const char * fmt, ... )
     268{
     269    va_list ap;
     270
     271    assert( tr_isTorrent( tor ) );
     272
     273    va_start( ap, fmt );
     274    tor->error = TR_STAT_LOCAL_ERROR;
     275    evutil_vsnprintf( tor->errorString, sizeof( tor->errorString ), fmt, ap );
     276    va_end( ap );
     277}
     278
    265279static void
    266280onTrackerResponse( void * tracker UNUSED,
    267                    void *         vevent,
    268                    void *         user_data )
     281                   void * vevent,
     282                   void * user_data )
    269283{
    270284    tr_torrent *       tor = user_data;
  • trunk/libtransmission/torrent.h

    r8910 r8912  
    2121#include "ratecontrol.h" /* tr_ratecontrol */
    2222#include "session.h" /* tr_globalLock(), tr_globalUnlock() */
    23 #include "utils.h" /* tr_bitfield */
     23#include "utils.h" /* TR_GNUC_PRINTF */
    2424
    2525struct tr_bandwidth;
     
    121121/** save a torrent's .resume file if it's changed since the last time it was saved */
    122122void             tr_torrentSave( tr_torrent * tor );
     123
     124void             tr_torrentSetLocalError( tr_torrent * tor, const char * fmt, ... ) TR_GNUC_PRINTF( 2, 3 );
    123125
    124126
Note: See TracChangeset for help on using the changeset viewer.