10f7d6847SJulian Elischer.\" Copyright (c) 1996 John Birrell <jb@cimlogic.com.au>. 20f7d6847SJulian Elischer.\" All rights reserved. 30f7d6847SJulian Elischer.\" 40f7d6847SJulian Elischer.\" Redistribution and use in source and binary forms, with or without 50f7d6847SJulian Elischer.\" modification, are permitted provided that the following conditions 60f7d6847SJulian Elischer.\" are met: 70f7d6847SJulian Elischer.\" 1. Redistributions of source code must retain the above copyright 80f7d6847SJulian Elischer.\" notice, this list of conditions and the following disclaimer. 90f7d6847SJulian Elischer.\" 2. Redistributions in binary form must reproduce the above copyright 100f7d6847SJulian Elischer.\" notice, this list of conditions and the following disclaimer in the 110f7d6847SJulian Elischer.\" documentation and/or other materials provided with the distribution. 120f7d6847SJulian Elischer.\" 3. All advertising materials mentioning features or use of this software 130f7d6847SJulian Elischer.\" must display the following acknowledgement: 140f7d6847SJulian Elischer.\" This product includes software developed by John Birrell. 150f7d6847SJulian Elischer.\" 4. Neither the name of the author nor the names of any co-contributors 160f7d6847SJulian Elischer.\" may be used to endorse or promote products derived from this software 170f7d6847SJulian Elischer.\" without specific prior written permission. 180f7d6847SJulian Elischer.\" 190f7d6847SJulian Elischer.\" THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND 200f7d6847SJulian Elischer.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 210f7d6847SJulian Elischer.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 220f7d6847SJulian Elischer.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 230f7d6847SJulian Elischer.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 240f7d6847SJulian Elischer.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 250f7d6847SJulian Elischer.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 260f7d6847SJulian Elischer.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 270f7d6847SJulian Elischer.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 280f7d6847SJulian Elischer.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 290f7d6847SJulian Elischer.\" SUCH DAMAGE. 300f7d6847SJulian Elischer.\" 310f7d6847SJulian Elischer.Dd April 4, 1996 320f7d6847SJulian Elischer.Dt PTHREAD_SETSPECIFIC 3 33a307d598SRuslan Ermilov.Os 340f7d6847SJulian Elischer.Sh NAME 350f7d6847SJulian Elischer.Nm pthread_setspecific 360f7d6847SJulian Elischer.Nd set a thread-specific data value 37d8a78688SAlexey Zelkin.Sh LIBRARY 38ec7452f1SRuslan Ermilov.Lb libpthread 390f7d6847SJulian Elischer.Sh SYNOPSIS 4032eef9aeSRuslan Ermilov.In pthread.h 410f7d6847SJulian Elischer.Ft int 420f7d6847SJulian Elischer.Fn pthread_setspecific "pthread_key_t key" "const void *value" 430f7d6847SJulian Elischer.Sh DESCRIPTION 440f7d6847SJulian ElischerThe 450f7d6847SJulian Elischer.Fn pthread_setspecific 460f7d6847SJulian Elischerfunction associates a thread-specific value with a 470f7d6847SJulian Elischer.Fa key 480f7d6847SJulian Elischerobtained via a previous call to 490f7d6847SJulian Elischer.Fn pthread_key_create . 50ddbb94adSTom RhodesDifferent threads can bind different values to the same key. 51c6ff3a1bSSheldon HearnThese values are 520f7d6847SJulian Elischertypically pointers to blocks of dynamically allocated memory that have been 530f7d6847SJulian Elischerreserved for use by the calling thread. 540f7d6847SJulian Elischer.Pp 550f7d6847SJulian ElischerThe effect of calling 560f7d6847SJulian Elischer.Fn pthread_setspecific 570f7d6847SJulian Elischerwith a key value not obtained from 580f7d6847SJulian Elischer.Fn pthread_key_create 590f7d6847SJulian Elischeror after 600f7d6847SJulian Elischer.Fa key 610f7d6847SJulian Elischerhas been deleted with 620f7d6847SJulian Elischer.Fn pthread_key_delete 630f7d6847SJulian Elischeris undefined. 640f7d6847SJulian Elischer.Pp 659d09157aSPhilippe CharnierThe 660f7d6847SJulian Elischer.Fn pthread_setspecific 679d09157aSPhilippe Charnierfunction may be called from a thread-specific data destructor function, 68*e5315a56SPatrick Kelseyhowever this may result in lost storage or infinite loops if doing so 69*e5315a56SPatrick Kelseycauses non-NULL key values to remain after 70*e5315a56SPatrick Kelsey.Bq PTHREAD_DESTRUCTOR_ITERATIONS 71*e5315a56SPatrick Kelseyiterations of destructor calls have been made. 720f7d6847SJulian Elischer.Sh RETURN VALUES 730f7d6847SJulian ElischerIf successful, the 740f7d6847SJulian Elischer.Fn pthread_setspecific 75c6ff3a1bSSheldon Hearnfunction will return zero. 76c6ff3a1bSSheldon HearnOtherwise an error number will be returned to 770f7d6847SJulian Elischerindicate the error. 780f7d6847SJulian Elischer.Sh ERRORS 799d09157aSPhilippe CharnierThe 800f7d6847SJulian Elischer.Fn pthread_setspecific 819d09157aSPhilippe Charnierfunction will fail if: 820f7d6847SJulian Elischer.Bl -tag -width Er 830f7d6847SJulian Elischer.It Bq Er ENOMEM 840f7d6847SJulian ElischerInsufficient memory exists to associate the value with the 850f7d6847SJulian Elischer.Fa key . 860f7d6847SJulian Elischer.It Bq Er EINVAL 870f7d6847SJulian ElischerThe 880f7d6847SJulian Elischer.Fa key 890f7d6847SJulian Elischervalue is invalid. 900f7d6847SJulian Elischer.El 910f7d6847SJulian Elischer.Sh SEE ALSO 9275141cc9SWolfram Schneider.Xr pthread_getspecific 3 , 930f7d6847SJulian Elischer.Xr pthread_key_create 3 , 9475141cc9SWolfram Schneider.Xr pthread_key_delete 3 950f7d6847SJulian Elischer.Sh STANDARDS 969d09157aSPhilippe CharnierThe 970f7d6847SJulian Elischer.Fn pthread_setspecific 989d09157aSPhilippe Charnierfunction conforms to 99096841ecSRuslan Ermilov.St -p1003.1-96 . 100