Работя върху някакъв код в ядрото на Linux (2.4) и по някаква причина kmalloc връща същия адрес (вярвам, че това се случва само след средата на теста). Проверих дали няма извиквания към kfree между извикванията към kmalloc (т.е. паметта все още се използва).
може би нямам памет? (kmalloc не върна NULL...)
някакви идеи как може да се случи такова нещо?
благодаря предварително за помощта!
код:
typedef struct
{
char* buffer;
int read_count;
int write_count;
struct semaphore read_sm;
struct semaphore write_sm;
int reader_ready;
int writer_ready;
int createTimeStamp;
} data_buffer_t ;
typedef struct vsf_t vsf_t;
struct vsf_t
{
int minor;
int type;
int open_count;
int waiting_pid;
data_buffer_t* data;
list_t proc_list;
vsf_t* otherSide_vsf;
int real_create_time_stamp;
};
int create_vsf(struct inode *inode, struct file *filp, struct vsf_command_parameters* parms)
{
...
buff_data = allocate_buffer();
if (buff_data == NULL)
{
kfree(this_vsfRead);
kfree(this_vsfWrite);
return -ENOMEM;
}
...
}
data_buffer_t* allocate_buffer()
{
...
data_buffer_t* this_buff = (data_buffer_t*)kmalloc(sizeof(data_buffer_t), GFP_KERNEL);
if (this_buff == NULL)
{
printk( KERN_WARNING "failure at allocating memory\n" );
return NULL;
}
...
return this_buff;
}
*Отпечатвам след всеки kmalloc и kfree, абсолютно съм сигурен, че не се извиква kfree между kmalloc (които връщат същия адрес)