Очистка удаленного вызова процедуры - PullRequest
2 голосов
/ 01 октября 2011

Моя ситуация следующая: Я реализовал простую систему RPC в C, с помощью которой клиент может вызывать удаленную функцию, которой он передает команду. Команда выполняется на удаленном компьютере, и строка, содержащая выходные данные, возвращается клиенту. Итак, сигнатура функции:

char* execute(char* command)

Внутри этой функции я делаю malloc для строки результата и возвращаю ее. Функция опубликована, и клиенты могут ее вызвать. Мой вопрос: каким образом я могу освобождать выделенный символ * на стороне сервера после каждого удаленного вызова процедуры?

Редактировать: Подробнее о моей проблеме: проблема здесь в том, что после первого вызова rpc сервер падает с ошибкой «glibc обнаружено free () неверный указатель». Внутри процедуры выполнения у меня есть что-то вроде:

char* result = (char*) malloc(STRING_SIZE * sizeof(char));
...
return result;

Я предполагаю, что он пытается и не может освободить возвращенный результат.

1 Ответ

1 голос
/ 01 октября 2011

Зависит от того, какой механизм RPC используется. Некоторые могут автоматически вызывать освобождающие функции для возвращаемых указателей, если функция помечена соответствующим образом.

Если ваша RPC-библиотека не может этого сделать, вы должны заменить malloc на что-то другое. На однопоточном сервере вы можете просто вернуть указатель на статический буфер, в многопоточном ... это зависит от ситуации.

...