mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-08 12:44:23 +01:00
2006-04-14 Marcus Brinkmann <marcus@g10code.de>
* app.c (select_application): Cover up a slot mismatch error in case it happens (it shouldn't happen). (release_application): Use APP->slot. Lock the reader. (application_notify_card_removed): Lock the reader.
This commit is contained in:
parent
c664309a0a
commit
751a3aeea7
@ -1,3 +1,10 @@
|
|||||||
|
2006-04-14 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
|
* app.c (select_application): Cover up a slot mismatch error in
|
||||||
|
case it happens (it shouldn't happen).
|
||||||
|
(release_application): Use APP->slot. Lock the reader.
|
||||||
|
(application_notify_card_removed): Lock the reader.
|
||||||
|
|
||||||
2006-04-11 Werner Koch <wk@g10code.com>
|
2006-04-11 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
* command.c (hex_to_buffer): New.
|
* command.c (hex_to_buffer): New.
|
||||||
|
31
scd/app.c
31
scd/app.c
@ -161,22 +161,25 @@ is_app_allowed (const char *name)
|
|||||||
void
|
void
|
||||||
application_notify_card_removed (int slot)
|
application_notify_card_removed (int slot)
|
||||||
{
|
{
|
||||||
|
app_t app;
|
||||||
|
|
||||||
if (slot < 0 || slot >= DIM (lock_table))
|
if (slot < 0 || slot >= DIM (lock_table))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* FIXME: We are ignoring any error value here. */
|
||||||
|
lock_reader (slot);
|
||||||
|
|
||||||
/* Deallocate a saved application for that slot, so that we won't
|
/* Deallocate a saved application for that slot, so that we won't
|
||||||
try to reuse it. If there is no saved application, set a flag so
|
try to reuse it. If there is no saved application, set a flag so
|
||||||
that we won't save the current state. */
|
that we won't save the current state. */
|
||||||
if (lock_table[slot].initialized)
|
app = lock_table[slot].last_app;
|
||||||
{
|
|
||||||
app_t app = lock_table[slot].last_app;
|
|
||||||
|
|
||||||
if (app)
|
if (app)
|
||||||
{
|
{
|
||||||
lock_table[slot].last_app = NULL;
|
lock_table[slot].last_app = NULL;
|
||||||
deallocate_app (app);
|
deallocate_app (app);
|
||||||
}
|
}
|
||||||
}
|
unlock_reader (slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -262,6 +265,8 @@ select_application (ctrl_t ctrl, int slot, const char *name, app_t *r_app)
|
|||||||
{
|
{
|
||||||
if (app->slot != slot)
|
if (app->slot != slot)
|
||||||
log_bug ("slot mismatch %d/%d\n", app->slot, slot);
|
log_bug ("slot mismatch %d/%d\n", app->slot, slot);
|
||||||
|
app->slot = slot;
|
||||||
|
|
||||||
app->ref_count++;
|
app->ref_count++;
|
||||||
*r_app = app;
|
*r_app = app;
|
||||||
unlock_reader (slot);
|
unlock_reader (slot);
|
||||||
@ -400,18 +405,22 @@ release_application (app_t app)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Move the reference to the application in the lock table. */
|
/* Move the reference to the application in the lock table. */
|
||||||
for (slot = 0; slot < DIM (lock_table); slot++)
|
slot = app->slot;
|
||||||
if (lock_table[slot].initialized && lock_table[slot].app == app)
|
/* FIXME: We are ignoring any error value. */
|
||||||
|
lock_reader (slot);
|
||||||
|
if (lock_table[slot].app != app)
|
||||||
{
|
{
|
||||||
|
unlock_reader (slot);
|
||||||
|
log_bug ("app mismatch %p/%p\n", app, lock_table[slot].app);
|
||||||
|
deallocate_app (app);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (lock_table[slot].last_app)
|
if (lock_table[slot].last_app)
|
||||||
deallocate_app (lock_table[slot].last_app);
|
deallocate_app (lock_table[slot].last_app);
|
||||||
lock_table[slot].last_app = lock_table[slot].app;
|
lock_table[slot].last_app = lock_table[slot].app;
|
||||||
lock_table[slot].app = NULL;
|
lock_table[slot].app = NULL;
|
||||||
return;
|
unlock_reader (slot);
|
||||||
}
|
|
||||||
|
|
||||||
log_debug ("application missing in lock table - deallocating anyway\n");
|
|
||||||
deallocate_app (app);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user