Ignore:
Timestamp:
Feb 23, 2010, 6:06:45 AM (12 years ago)
Author:
charles
Message:

(trunk libT) add a wrapper function tr_valloc() to try posix_memalign(), getpagesize(), valloc() etc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/utils.c

    r10239 r10274  
    1515#endif
    1616
     17#if defined(SYS_DARWIN)
     18 #define HAVE_GETPAGESIZE
     19 #define HAVE_VALLOC
     20 #undef HAVE_POSIX_MEMALIGN /* not supported on OS X 10.5 and lower */
     21#endif
     22
     23#if defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_VALLOC)
     24 #define _XOPEN_SOURCE 600 /* pick posix_memalign and valloc declarations */
     25#endif
     26
    1727#include <assert.h>
    1828#include <ctype.h> /* isalpha, tolower */
     
    2838#include <sys/types.h>
    2939#include <sys/stat.h>
    30 #include <unistd.h> /* usleep, stat, getcwd */
     40#include <unistd.h> /* usleep, stat, getcwd, getpagesize */
    3141
    3242#include "event.h"
     
    14411451    return 0;
    14421452}
     1453
     1454/***
     1455****
     1456***/
     1457
     1458void*
     1459tr_valloc( size_t bufLen )
     1460{
     1461    size_t allocLen;
     1462    void * buf = NULL;
     1463    static size_t pageSize = 0;
     1464
     1465    if( !pageSize ) {
     1466#ifdef HAVE_GETPAGESIZE
     1467        pageSize = getpagesize();
     1468#else /* guess */
     1469        pageSize = 4096;
     1470#endif
     1471    }
     1472
     1473    allocLen = pageSize;
     1474    while( allocLen < bufLen )
     1475        allocLen += pageSize;
     1476
     1477#ifdef HAVE_POSIX_MEMALIGN
     1478    if( !buf )
     1479        posix_memalign( &buf, pageSize, allocLen );
     1480#endif
     1481#ifdef HAVE_VALLOC
     1482    if( !buf )
     1483        buf = valloc( allocLen );
     1484#endif
     1485    if( !buf )
     1486        buf = malloc( allocLen );
     1487
     1488    tr_dbg( "tr_valloc(%zu) allocating %zu bytes", bufLen, allocLen );
     1489    return buf;
     1490}
Note: See TracChangeset for help on using the changeset viewer.