[sisyphus] Странные грабли с Pthread !!!

Roman Savochenko =?iso-8859-1?q?rom=5Fas_=CE=C1_diyaorg=2Edp=2Eua?=
Ср Ноя 10 21:46:29 MSK 2004


Привет народ!

Обнаружил тута странные грабли с потоками (pthread)!
А суть в следующем.
При открытии-закрытии потока наблюдается утечка памяти.
Обнаружилось на серверной задаче которая использует потоки для 
распараллеливания обработки клиентских запросов.
При этом, задача, клиентские потоки не держит открытыми, а создаёт при 
поступлении запроса.
Т.е при каждом запросе клиента размер сервера в памяти увеличивается на 
2Мб!!! (Контролирую по параметру VmSize в ksisguard)
Хотя физически память не расходуется!

Для проверки предположения я написал тестовую программку:
//--------------------- test_threads.c -----------------------------
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void *Task(void *prm)
{
    printf("Start pthread: %d!!!\n",*(int *)prm);

    pthread_exit(NULL);
}

int main()
{
    int cnt = 100;
    pthread_t pthr_tsk;
    pthread_attr_t pthr_attr;
    pthread_attr_init(&pthr_attr);
    pthread_attr_setschedpolicy(&pthr_attr,SCHED_OTHER);

    sleep(10);

    while(cnt--)
    {
        pthread_create(&pthr_tsk,&pthr_attr,Task,&cnt);
        sleep(1);
    }

    pthread_attr_destroy(&pthr_attr);

    sleep(10);

    return 0;
}
//--------------------- test_threads.c -----------------------------

Имеем значения параметра VmSize:
- в начале теста: 2.424 Мб
- в конце теста: 207.360 Мб!!!
Круто для такой маленькой программки! :)
Кстате это актуально не только для ALTLinux2.4 но и для древнего 
ASPLinux7.3!

Это я чего-то не понял или это действительно грабли?

С уважением Роман!



Подробная информация о списке рассылки Sisyphus