From: arne@vajhoej.dk   
      
   On 12/4/2025 2:12 PM, Arne Vajhøj wrote:   
   > On 12/4/2025 1:29 PM, Simon Clubley wrote:   
   >> On 2025-12-04, Arne Vajhøj wrote:   
   >>>   
   >>> A sequence of:   
   >>>   
   >>> cma_thread_create   
   >>> cma_mutex_lock   
   >>> cma_mutex_unlock   
   >>> cma_thread_join   
   >>>   
   >>> and after a little over 10000 iterations:   
   >>>   
   >>> %SYSTEM-F-INSFMEM, insufficient dynamic memory   
   >>> %TRACE-F-NOMSG, Message number 00098054   
   >>> %TRACE-I-NOMSG, Message number 00098043   
   >>>   
   >>   
   >> Resource leak ?   
   >   
   > Definitely.   
   >   
   > But the code is rather simple.   
   >   
   > Shortest reproducer:   
   >   
   > #include    
   > #include    
   >   
   > #include    
   > #include    
   >   
   > void *run(void *p)   
   > {   
   > if(p != NULL) printf("arg pointer = %p\n", p);   
   > return NULL;   
   > }   
   >   
   > int main()   
   > {   
   > cma_t_thread t;   
   > cma_t_exit_status stat;   
   > void *p;   
   > cma_init();   
   > int n = 0;   
   > while(1)   
   > {   
   > cma_thread_create(&t, &cma_c_null, run, NULL);   
   > cma_thread_join(&t, &stat, &p);   
      
   Insert:   
      
   cma_thread_detach(&t);   
      
   and memory gets freed.   
      
   I don't know if this is intentional.   
      
   Usually join is sufficient.   
      
   > if(p != NULL) printf("return pointer = %p\n", p);   
   > n++;   
   > printf("%d\n", n);   
   > }   
   > return 0;   
   > }   
      
   Arne   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|