Customize the stack size of the threads used by pupnp through the new THREAD_STACK_SIZE variable
This patch allows a user to customize the stack size of the threads used by
pupnp through the new THREAD_STACK_SIZE variable. This is especially useful
on embedded systems with limited memory where the user can set THREAD_STACK_SIZE
to ITHREAD_STACK_MIN.
However, as this modification can have side effects, I set 0 as the default
value, so threads will continue to use the default stack size of the system
(which varies greatly as stated in
https://computing.llnl.gov/tutorials/pthreads/).
(cherry picked from commit 467f9987a1)
This commit is contained in:
committed by
Marcelo Roberto Jimenez
parent
ba4ea3bc9b
commit
4a8c4f5c50
@@ -115,6 +115,10 @@ typedef enum priority {
|
||||
#define DEFAULT_MAX_THREADS 10
|
||||
|
||||
|
||||
/*! default stack size used by TPAttrInit */
|
||||
#define DEFAULT_STACK_SIZE 0
|
||||
|
||||
|
||||
/*! default jobs per thread used by TPAttrInit */
|
||||
#define DEFAULT_JOBS_PER_THREAD 10
|
||||
|
||||
@@ -182,6 +186,10 @@ typedef struct THREADPOOLATTR
|
||||
/* maxThreads, ThreadPool will never have more than this number of threads */
|
||||
int maxThreads;
|
||||
|
||||
/* stackSize (in bytes), this is the minimum stack size allocated for each
|
||||
* thread */
|
||||
size_t stackSize;
|
||||
|
||||
/* maxIdleTime (in milliseconds) this is the maximum time a thread will
|
||||
* remain idle before dying */
|
||||
int maxIdleTime;
|
||||
@@ -522,6 +530,20 @@ int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads);
|
||||
int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads);
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Function: TPAttrSetStackSize
|
||||
*
|
||||
* Description:
|
||||
* Sets the stack size for the thread pool attributes.
|
||||
* Parameters:
|
||||
* attr - must be valid thread pool attributes.
|
||||
* stackSize - value to set
|
||||
* Returns:
|
||||
* Always returns 0.
|
||||
*****************************************************************************/
|
||||
int TPAttrSetStackSize(ThreadPoolAttr *attr, size_t stackSize);
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Function: TPAttrSetIdleTime
|
||||
*
|
||||
|
||||
@@ -85,7 +85,10 @@ extern "C" {
|
||||
|
||||
#define ITHREAD_CANCELED PTHREAD_CANCELED
|
||||
|
||||
|
||||
|
||||
#define ITHREAD_STACK_MIN PTHREAD_STACK_MIN
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
* Name: ithread_t
|
||||
*
|
||||
@@ -726,6 +729,49 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
|
||||
***************************************************************************/
|
||||
#define ithread_cond_destroy pthread_cond_destroy
|
||||
|
||||
/****************************************************************************
|
||||
* Function: ithread_attr_init
|
||||
*
|
||||
* Description:
|
||||
* Initialises thread attribute object.
|
||||
* Parameters:
|
||||
* ithread_attr_t *attr (must be valid non NULL pointer to
|
||||
* ithread_attr_t)
|
||||
* Returns:
|
||||
* 0 on success. Nonzero on failure.
|
||||
* See man page for pthread_attr_init
|
||||
***************************************************************************/
|
||||
#define ithread_attr_init pthread_attr_init
|
||||
|
||||
/****************************************************************************
|
||||
* Function: ithread_attr_destroy
|
||||
*
|
||||
* Description:
|
||||
* Destroys thread attribute object.
|
||||
* Parameters:
|
||||
* ithread_attr_t *attr (must be valid non NULL pointer to
|
||||
* ithread_attr_t)
|
||||
* Returns:
|
||||
* 0 on success. Nonzero on failure.
|
||||
* See man page for pthread_attr_destroy
|
||||
***************************************************************************/
|
||||
#define ithread_attr_destroy pthread_attr_destroy
|
||||
|
||||
/****************************************************************************
|
||||
* Function: ithread_attr_setstacksize
|
||||
*
|
||||
* Description:
|
||||
* Sets stack size of a thread attribute object.
|
||||
* Parameters:
|
||||
* ithread_attr_t *attr (must be valid non NULL pointer to
|
||||
* ithread_attr_t)
|
||||
* size_t stacksize (value of stacksize must be greater than
|
||||
* ITHREAD_STACK_MIN and lower than system-imposed limits
|
||||
* Returns:
|
||||
* 0 on success. Nonzero on failure.
|
||||
* See man page for pthread_attr_setstacksize
|
||||
***************************************************************************/
|
||||
#define ithread_attr_setstacksize pthread_attr_setstacksize
|
||||
|
||||
/****************************************************************************
|
||||
* Function: ithread_create
|
||||
@@ -735,7 +781,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
|
||||
* and argument.
|
||||
* Parameters:
|
||||
* ithread_t * thread (must be valid non NULL pointer to pthread_t)
|
||||
* ithread_attr_t *attr, IGNORED
|
||||
* ithread_attr_t *attr
|
||||
* void * (start_routine) (void *arg) (start routine)
|
||||
* void * arg - argument.
|
||||
* Returns:
|
||||
|
||||
Reference in New Issue
Block a user