X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.c;h=bd705050d328a23dda1b9610c3c5dd5d9dcb483d;hp=30acfa041d4d8b6d483857096b9196e17311ba20;hb=b4418a6993c2c146c6da048d027254c8dd56799e;hpb=59a4f545566f77a22a8c27ece5155ecd154d4145 diff --git a/afs.c b/afs.c index 30acfa04..bd705050 100644 --- a/afs.c +++ b/afs.c @@ -574,7 +574,7 @@ int afs_cb_result_handler(struct osl_object *result, uint8_t band, } } -void flush_and_free_pb(struct para_buffer *pb) +static void flush_and_free_pb(struct para_buffer *pb) { int ret; struct afs_max_size_handler_data *amshd = pb->private_data; @@ -590,20 +590,12 @@ void flush_and_free_pb(struct para_buffer *pb) static int com_select_callback(struct afs_callback_arg *aca) { - struct para_buffer pb = { - .max_size = shm_get_shmmax(), - .private_data = &(struct afs_max_size_handler_data) { - .fd = aca->fd, - .band = SBD_OUTPUT - }, - .max_size_handler = afs_max_size_handler, - }; char *arg = aca->query.data; int num_admissible, ret; ret = clear_score_table(); if (ret < 0) { - para_printf(&pb, "could not clear score table: %s\n", + para_printf(&aca->pbout, "could not clear score table: %s\n", para_strerror(-ret)); return ret; } @@ -614,20 +606,19 @@ static int com_select_callback(struct afs_callback_arg *aca) ret = activate_mood_or_playlist(arg, &num_admissible); if (ret >= 0) goto out; - para_printf(&pb, "could not activate %s: %s\n" + /* ignore subsequent errors (but log them) */ + para_printf(&aca->pbout, "could not activate %s: %s\n" "switching back to %s\n", arg, para_strerror(-ret), current_mop? current_mop : "dummy"); - /* ignore subsequent errors (but log them) */ ret = activate_mood_or_playlist(current_mop, &num_admissible); if (ret >= 0) goto out; - para_printf(&pb, "could not activate %s: %s\nswitching to dummy\n", + para_printf(&aca->pbout, "could not activate %s: %s\nswitching to dummy\n", current_mop, para_strerror(-ret)); activate_mood_or_playlist(NULL, &num_admissible); out: - para_printf(&pb, "activated %s (%d admissible files)\n", + para_printf(&aca->pbout, "activated %s (%d admissible files)\n", current_mop? current_mop : "dummy mood", num_admissible); - flush_and_free_pb(&pb); return ret; } @@ -858,6 +849,12 @@ static int call_callback(int fd, int query_shmid) cq = query_shm; aca.query.data = (char *)query_shm + sizeof(*cq); aca.query.size = cq->query_size; + aca.pbout.max_size = shm_get_shmmax(); + aca.pbout.max_size_handler = afs_max_size_handler; + aca.pbout.private_data = &(struct afs_max_size_handler_data) { + .fd = fd, + .band = SBD_OUTPUT + }; ret = cq->handler(&aca); ret2 = shm_detach(query_shm); if (ret2 < 0) { @@ -867,6 +864,7 @@ static int call_callback(int fd, int query_shmid) else ret = ret2; } + flush_and_free_pb(&aca.pbout); if (ret < 0) { ret2 = pass_buffer_as_shm(fd, SBD_AFS_CB_FAILURE, (const char *)&ret, sizeof(ret)); @@ -1037,13 +1035,6 @@ static int com_init_callback(struct afs_callback_arg *aca) { uint32_t table_mask = *(uint32_t *)aca->query.data; int i, ret; - struct para_buffer pb = { - .max_size = shm_get_shmmax(), - .private_data = &(struct afs_max_size_handler_data) { - .fd = aca->fd, - .band = SBD_OUTPUT - } - }; close_afs_tables(); for (i = 0; i < NUM_AFS_TABLES; i++) { @@ -1055,16 +1046,17 @@ static int com_init_callback(struct afs_callback_arg *aca) continue; ret = t->create(database_dir); if (ret < 0) { - para_printf(&pb, "cannot create table %s\n", t->name); + para_printf(&aca->pbout, "cannot create table %s\n", + t->name); goto out; } - para_printf(&pb, "successfully created %s table\n", t->name); + para_printf(&aca->pbout, "successfully created %s table\n", + t->name); } ret = open_afs_tables(); if (ret < 0) - para_printf(&pb, "cannot open afs tables\n"); + para_printf(&aca->pbout, "cannot open afs tables\n"); out: - flush_and_free_pb(&pb); return ret; }