On 08/07/2012 10:36 AM, DAN LI wrote:
> pthread_cond_brodcast/1-2.c try to create as many childrens(thread or 
> process) 
> as possible,however,if current free memory is exhausted before all childrens 
> are
> started,the case will timeout and hung since it's stated with program "t0".
>  
> The patch adjust count of childrens according to judgement of size of current 
> free
> memory.
> 
> Signed-off-by: DAN LI <[email protected]>
> ---
>  .../interfaces/pthread_cond_broadcast/1-2.c        |   39 
> ++++++++++++++++++--
>  1 files changed, 35 insertions(+), 4 deletions(-)
> 
> diff --git 
> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
>  
> b/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
> index f6ad9df..a31dc2b 100644
> --- 
> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
> +++ 
> b/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
> @@ -48,6 +48,7 @@
>  #include <sys/mman.h>
>  #include <sys/wait.h>
>  #include <semaphore.h>
> +#include <sys/sysinfo.h>
>  
>  #include "../testfrmw/testfrmw.h"
>  #include "../testfrmw/testfrmw.c"
> @@ -82,8 +83,8 @@
>  #endif
>  
>  /* Do not create more than this amount of children: */
> -#define MAX_PROCESS_CHILDREN  (200)
> -#define MAX_THREAD_CHILDREN   (1000)
> +static int max_process_children  = 200;
> +static int max_thread_children = 1000;
>  
>  #define TIMEOUT  (180)
>  
> @@ -242,6 +243,34 @@ void *timer(void *arg)
>       FAILED_KILLALL("Operation timed out. A signal was lost.");
>       return NULL; /* For compiler */
>  }
> +static int decide_process_children_count(void)
> +{
> +     struct sysinfo sysinforma;
> +     int ret;
> +     int avail_count;
> +     unsigned long memper;
> +     unsigned long min_stack;
> +
> +     min_stack = sysconf(_SC_THREAD_STACK_MIN);
> +
> +     ret = sysinfo(&sysinforma);

This is a linux specific function, so you can define this function
like this

#ifdef __linux__
static void decide_xxx(void)
{
        xxx
        xxx
}
#else
static void decide_xxx(void)
{
        return;
}
#endif

Thanks,
Wanlong Gao


> +     if (ret != 0)
> +             UNRESOLVED(ret, "Failed to get system infomation.");
> +
> +     memper = min_stack * max_thread_children;
> +     if (memper > sysinforma.freeram)
> +             UNTESTED("Free ram not enough for test.");
> +
> +     avail_count = sysinforma.freeram / memper;
> +
> +     if (avail_count < 10)
> +             UNTESTED("Free ram not enough for test.");
> +
> +     max_process_children = (avail_count < max_process_children ?
> +                                     avail_count : max_process_children);
> +
> +     return 0;
> +}
>  
>  int main(int argc, char *argv[])
>  {
> @@ -268,6 +297,8 @@ int main(int argc, char *argv[])
>  
>       output_init();
>  
> +     decide_process_children_count();
> +
>       /* check the system abilities */
>       pshared = sysconf(_SC_THREAD_PROCESS_SHARED);
>       cs = sysconf(_SC_CLOCK_SELECTION);
> @@ -476,7 +507,7 @@ int main(int argc, char *argv[])
>                               } else {
>                                       ret = errno;
>                               }
> -                     } while ((ret == 0) && (child_count < 
> MAX_THREAD_CHILDREN));
> +                     } while ((ret == 0) && (child_count < 
> max_thread_children));
>                       #if VERBOSE > 2
>                       output("[parent] Created %i children threads\n", 
> child_count);
>                       #endif
> @@ -504,7 +535,7 @@ int main(int argc, char *argv[])
>                               } else {
>                                       ret = errno;
>                               }
> -                     } while ((ret == 0) && (child_count < 
> MAX_PROCESS_CHILDREN));
> +                     } while ((ret == 0) && (child_count < 
> max_process_children));
>                       #if VERBOSE > 2
>                       output("[parent] Created %i children processes\n", 
> child_count);
>                       #endif
> -- 
> 1.7.7.6
> 


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to