Я работаю над некоторым кодом в ядре Linux (2.4) и по какой-то причине kmalloc возвращает тот же адрес (я полагаю, что это происходит только после середины теста).Я проверил, что между вызовами kmalloc не было сделано ни одного вызова kfree (т. Е. Память все еще используется).
может быть, мне не хватает памяти?(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, я абсолютно уверен, что между kmalloc (которые возвращают один и тот же адрес) не вызывается kfree