diff options
author | anbui <none@none> | 2007-12-11 14:33:12 -0800 |
---|---|---|
committer | anbui <none@none> | 2007-12-11 14:33:12 -0800 |
commit | cec46d775eb90ec3bcda95b59e0c3e8aa9206b22 (patch) | |
tree | f82364f96d7b4154861b2840a089e358b311c66a /usr/src/lib/libpicltree/picltree.c | |
parent | 10f9768d1f72c3a57985d93fe30d63aab7749e19 (diff) | |
download | illumos-joyent-cec46d775eb90ec3bcda95b59e0c3e8aa9206b22.tar.gz |
6547920 picl_wait(3PICL) incorrectly documents the value for no timeout
Diffstat (limited to 'usr/src/lib/libpicltree/picltree.c')
-rw-r--r-- | usr/src/lib/libpicltree/picltree.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/usr/src/lib/libpicltree/picltree.c b/usr/src/lib/libpicltree/picltree.c index d79ae48082..a62c1caf72 100644 --- a/usr/src/lib/libpicltree/picltree.c +++ b/usr/src/lib/libpicltree/picltree.c @@ -1318,7 +1318,7 @@ ptree_create_prop(const ptree_propinfo_t *pinfo, const void *valbuf, return (err); } else if ((strcmp(pinfo->piclinfo.name, PICL_PROP_CLASSNAME) == 0) && ((pinfo->piclinfo.type != PICL_PTYPE_CHARSTRING) || - (strlen(valbuf) >= PICL_CLASSNAMELEN_MAX))) + (strlen(valbuf) >= PICL_CLASSNAMELEN_MAX))) return (PICL_RESERVEDNAME); else if ((strcmp(pinfo->piclinfo.name, PICL_PROP_NAME) == 0) && (pinfo->piclinfo.type != PICL_PTYPE_CHARSTRING)) @@ -2831,8 +2831,8 @@ get_child_by_path(picl_nodehdl_t rooth, char *prl, for (err = ptree_get_propval_by_name(rooth, PICL_PROP_CHILD, &chdh, sizeof (picl_nodehdl_t)); err != PICL_PROPNOTFOUND; - err = ptree_get_propval_by_name(chdh, PICL_PROP_PEER, &chdh, - sizeof (picl_nodehdl_t))) { + err = ptree_get_propval_by_name(chdh, PICL_PROP_PEER, &chdh, + sizeof (picl_nodehdl_t))) { if (err != PICL_SUCCESS) { free_list(plist); return (PICL_FAILURE); @@ -2860,8 +2860,8 @@ get_child_by_path(picl_nodehdl_t rooth, char *prl, if ((ptree_get_propval_by_name(chdh, PICL_PROP_BUS_ADDR, busval, (strlen(baddr) + 1)) != PICL_SUCCESS) && (ptree_get_propval_by_name(chdh, - PICL_PROP_UNIT_ADDRESS, busval, - (strlen(baddr) + 1)) != PICL_SUCCESS)) + PICL_PROP_UNIT_ADDRESS, busval, + (strlen(baddr) + 1)) != PICL_SUCCESS)) continue; if (strcmp(busval, baddr) != 0) @@ -3639,26 +3639,30 @@ xptree_refresh_notify(uint32_t secs) int ret; timespec_t to; - if (pthread_mutex_lock(&ptree_refresh_mutex) != 0) - return (PICL_FAILURE); - - curgen = ptree_generation; + if (secs != 0) { + if (pthread_mutex_lock(&ptree_refresh_mutex) != 0) + return (PICL_FAILURE); - while (curgen == ptree_generation) { - if (secs == 0) /* wait forever */ - (void) pthread_cond_wait(&ptree_refresh_cond, - &ptree_refresh_mutex); - else { - to.tv_sec = secs; - to.tv_nsec = 0; - ret = pthread_cond_reltimedwait_np(&ptree_refresh_cond, - &ptree_refresh_mutex, &to); - if (ret == ETIMEDOUT) - break; + curgen = ptree_generation; + + while (curgen == ptree_generation) { + if (secs == -1) /* wait forever */ + (void) pthread_cond_wait(&ptree_refresh_cond, + &ptree_refresh_mutex); + else { + to.tv_sec = secs; + to.tv_nsec = 0; + ret = pthread_cond_reltimedwait_np( + &ptree_refresh_cond, + &ptree_refresh_mutex, &to); + if (ret == ETIMEDOUT) + break; + } } + + (void) pthread_mutex_unlock(&ptree_refresh_mutex); } - (void) pthread_mutex_unlock(&ptree_refresh_mutex); return (PICL_SUCCESS); } |