/** * Destroy a mutex attributes object. * * This service destroys the mutex attributes object @a attr. The object becomes * invalid for all mutex services (they all return EINVAL) except * pthread_mutexattr_init(). * * @param attr the initialized mutex attributes object to be destroyed. * * @return 0 on success; * @return an error number if: * - EINVAL, the mutex attributes object @a attr is invalid. * * @see * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_mutexattr_destroy.html"> * Specification.</a> * */ int pthread_mutexattr_destroy(pthread_mutexattr_t * attr) { spl_t s; xnlock_get_irqsave(&nklock, s); if (!pse51_obj_active(attr,PSE51_MUTEX_ATTR_MAGIC,pthread_mutexattr_t)) { xnlock_put_irqrestore(&nklock, s); return EINVAL; } pse51_mark_deleted(attr); xnlock_put_irqrestore(&nklock, s); return 0; }
/** * Destroy a thread attributes object. * * This service invalidates the attribute object pointed to by @a attr. The * object becomes invalid for all services (they all return EINVAL) except * pthread_attr_init(). * * @see * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_destroy.html"> * Specification.</a> * */ int pthread_attr_destroy(pthread_attr_t * attr) { char *name; spl_t s; xnlock_get_irqsave(&nklock, s); if (!pse51_obj_active(attr, PSE51_THREAD_ATTR_MAGIC, pthread_attr_t)) { xnlock_put_irqrestore(&nklock, s); return EINVAL; } name = attr->name; pse51_mark_deleted(attr); xnlock_put_irqrestore(&nklock, s); if (name) xnfree(name); return 0; }