mirror of
https://github.com/schoebel/mars
synced 2025-02-21 14:56:55 +00:00
workaround for rare race condition in trans_logger
This commit is contained in:
parent
fd5c6abc6c
commit
92a4684692
@ -654,12 +654,17 @@ static int _server_thread(void *data)
|
||||
MARS_INF("-------- cleaning up ----------\n");
|
||||
|
||||
if (brick) {
|
||||
//FIXME: this hangs up. Leaving a minor memleak for now.
|
||||
//mars_put_socket(&brick->handler_socket);
|
||||
//status = mars_kill_brick((void*)brick);
|
||||
//if(status < 0) {
|
||||
//BRICK_WRN("kill status = %d, giving up\n", status);
|
||||
//}
|
||||
MARS_DBG("cleaning up unused brick\n");
|
||||
#if 0 // FIXME
|
||||
if (brick->handler_socket.s_socket) {
|
||||
MARS_DBG("put socket\n");
|
||||
mars_put_socket(&brick->handler_socket);
|
||||
}
|
||||
status = mars_kill_brick((void*)brick);
|
||||
if (unlikely(status < 0)) {
|
||||
BRICK_WRN("kill status = %d, giving up\n", status);
|
||||
}
|
||||
#endif
|
||||
brick = NULL;
|
||||
}
|
||||
|
||||
|
@ -878,6 +878,7 @@ static noinline
|
||||
void free_writeback(struct writeback_info *wb)
|
||||
{
|
||||
struct list_head *tmp;
|
||||
int cleanup_count = 0;
|
||||
|
||||
if (unlikely(wb->w_error < 0)) {
|
||||
MARS_ERR("writeback error = %d at pos = %lld len = %d, writeback is incomplete\n", wb->w_error, wb->w_pos, wb->w_len);
|
||||
@ -887,9 +888,11 @@ void free_writeback(struct writeback_info *wb)
|
||||
* This code is only for cleanup in case of errors.
|
||||
*/
|
||||
while (unlikely((tmp = wb->w_sub_read_list.next) != &wb->w_sub_read_list)) {
|
||||
cleanup_count++;
|
||||
_free_one(tmp);
|
||||
}
|
||||
while (unlikely((tmp = wb->w_sub_write_list.next) != &wb->w_sub_write_list)) {
|
||||
cleanup_count++;
|
||||
_free_one(tmp);
|
||||
}
|
||||
|
||||
@ -906,8 +909,9 @@ void free_writeback(struct writeback_info *wb)
|
||||
|
||||
CHECK_ATOMIC(&orig_mref->ref_count, 1);
|
||||
#if 1
|
||||
if (!orig_mref_a->is_completed) {
|
||||
MARS_ERR("request %lld (len = %d) was not completed\n", orig_mref->ref_pos, orig_mref->ref_len);
|
||||
while (!orig_mref_a->is_completed) {
|
||||
MARS_ERR("request %lld (len = %d) was not completed, cleanup_count = %d\n", orig_mref->ref_pos, orig_mref->ref_len, cleanup_count);
|
||||
msleep(10000);
|
||||
}
|
||||
#endif
|
||||
if (likely(wb->w_error >= 0)) {
|
||||
|
@ -1022,7 +1022,7 @@ int mars_kill_brick(struct mars_brick *brick)
|
||||
CHECK_PTR(brick, done);
|
||||
global = brick->global;
|
||||
|
||||
MARS_DBG("===> killing brick %s path = '%s' name = '%s'\n", SAFE_STR(brick->type->type_name), SAFE_STR(brick->brick_path), SAFE_STR(brick->brick_name));
|
||||
MARS_DBG("===> killing brick %s path = '%s' name = '%s'\n", brick->type ? SAFE_STR(brick->type->type_name) : "undef", SAFE_STR(brick->brick_path), SAFE_STR(brick->brick_name));
|
||||
|
||||
if (global) {
|
||||
down_write(&global->brick_mutex);
|
||||
|
Loading…
Reference in New Issue
Block a user