From 7fbebcb96fd13e5e0308827240eae26ba95302fa Mon Sep 17 00:00:00 2001 From: "Fish (David B. Trout)" Date: Sat, 15 Sep 2018 05:47:57 -0700 Subject: [PATCH] Use have_lock to improve commit 8c1e924a20200e5275ea6ad9177b0e2c0eb00d93 --- config.c | 50 ++++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/config.c b/config.c index b6b855fb..a11f868c 100644 --- a/config.c +++ b/config.c @@ -541,21 +541,24 @@ static void AddDevnumFastLookup( DEVBLK *dev, U16 lcss, U16 devnum ) { unsigned int Channel; - BYTE bAlreadyHadLock = try_obtain_lock( &sysblk.config ); + int have_config_lock = have_lock( &sysblk.config ); - if (sysblk.devnum_fl == NULL) - sysblk.devnum_fl = (DEVBLK***) - calloc( 256 * FEATURE_LCSS_MAX, sizeof( DEVBLK** )); + if (!have_config_lock) + obtain_lock( &sysblk.config ); + { + if (sysblk.devnum_fl == NULL) + sysblk.devnum_fl = (DEVBLK***) + calloc( 256 * FEATURE_LCSS_MAX, sizeof( DEVBLK** )); - Channel = (devnum >> 8) | ((lcss & (FEATURE_LCSS_MAX-1)) << 8); + Channel = (devnum >> 8) | ((lcss & (FEATURE_LCSS_MAX-1)) << 8); - if (sysblk.devnum_fl[Channel] == NULL) - sysblk.devnum_fl[Channel] = (DEVBLK**) - calloc( 256, sizeof( DEVBLK* )); + if (sysblk.devnum_fl[Channel] == NULL) + sysblk.devnum_fl[Channel] = (DEVBLK**) + calloc( 256, sizeof( DEVBLK* )); - sysblk.devnum_fl[Channel][devnum & 0xff] = dev; - - if (!bAlreadyHadLock) + sysblk.devnum_fl[Channel][devnum & 0xff] = dev; + } + if (!have_config_lock) release_lock( &sysblk.config ); } @@ -563,21 +566,24 @@ static void AddSubchanFastLookup( DEVBLK *dev, U16 ssid, U16 subchan ) { unsigned int schw; - BYTE bAlreadyHadLock = try_obtain_lock( &sysblk.config ); + int have_config_lock = have_lock( &sysblk.config ); - if (sysblk.subchan_fl == NULL) - sysblk.subchan_fl = (DEVBLK***) - calloc( 256 * FEATURE_LCSS_MAX, sizeof( DEVBLK** )); + if (!have_config_lock) + obtain_lock( &sysblk.config ); + { + if (sysblk.subchan_fl == NULL) + sysblk.subchan_fl = (DEVBLK***) + calloc( 256 * FEATURE_LCSS_MAX, sizeof( DEVBLK** )); - schw = (subchan >> 8) | (SSID_TO_LCSS( ssid ) << 8); + schw = (subchan >> 8) | (SSID_TO_LCSS( ssid ) << 8); - if (sysblk.subchan_fl[schw] == NULL) - sysblk.subchan_fl[schw] = (DEVBLK**) - calloc( 256, sizeof( DEVBLK* )); + if (sysblk.subchan_fl[schw] == NULL) + sysblk.subchan_fl[schw] = (DEVBLK**) + calloc( 256, sizeof( DEVBLK* )); - sysblk.subchan_fl[schw][subchan & 0xff] = dev; - - if (!bAlreadyHadLock) + sysblk.subchan_fl[schw][subchan & 0xff] = dev; + } + if (!have_config_lock) release_lock( &sysblk.config ); }