\r
#include <writer.h>\r
#include <command.h>\r
+#include <unit.h>\r
\r
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
\r
int\r
writer_free(writer_t* ptr)\r
{\r
- /* TODO : check the parameter */\r
+\r
+ if((*ptr)->written)\r
+ xbt_os_sem_destroy((*ptr)->written);\r
\r
- /*xbt_os_sem_destroy((*writer)->started);\r
- xbt_os_sem_destroy((*writer)->can_write);*/\r
+ if((*ptr)->can_write)\r
+ xbt_os_sem_destroy((*ptr)->can_write);\r
\r
free(*ptr);\r
+\r
*ptr = NULL;\r
\r
return 0;\r
\r
if(writer->failed && !command->successeded && !command->failed && !command->interrupted)\r
{\r
- error_register("Write failure", errno, command->context->command_line, command->unit->fstream->name);\r
+ ERROR2("[%s] Error while writing input to child `%s'", command->context->pos, command->context->command_line);\r
+ unit_set_error(command->unit, (int)GetLastError(), 0);\r
command_handle_failure(command, csr_write_failure);\r
}\r
/*else if(writer->broken_pipe && !command->successeded && !command->failed && !command->interrupted)\r
{\r
+\r
+ ERROR2("[%s] Pipe broken while writing input to child `%s'", command->context->pos, command->context->command_line);\r
+ unit_set_error(command->unit, (int)GetLastError(), 0);\r
command_kill(command);\r
command_handle_failure(command, csr_write_pipe_broken);\r
}*/\r
if(writer->failed && !command->successeded && !command->failed && !command->interrupted)\r
{\r
command_kill(command);\r
- error_register("Write failure", errno, command->context->command_line, command->unit->fstream->name);\r
+ ERROR2("[%s] Error while writing input to child `%s'", command->context->pos, command->context->command_line);\r
+ \r
+ unit_set_error(command->unit, errno, 0);\r
command_handle_failure(command, csr_write_failure);\r
}\r
else if(writer->broken_pipe && !command->successeded && !command->failed && !command->interrupted)\r
{\r
- error_register("write() function failed", errno, command->context->command_line, command->unit->fstream->name);\r
+ ERROR2("[%s] Pipe broken while writing input to child `%s'", command->context->pos, command->context->command_line);\r
+\r
+ unit_set_error(command->unit, errno, 0);\r
command_kill(command);\r
command_handle_failure(command, csr_write_pipe_broken);\r
}\r