diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index fdcc9ae79..a6e1d9703 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,8 @@ +2006-08-10 Josh Parsons + + * gobject/tmpl/gtype.sgml: + * glib/tmpl/threads.sgml: Style and grammar fixes. + 2006-08-05 Matthias Clasen * glib/tmpl/messages.sgml: Add some hints diff --git a/docs/reference/glib/tmpl/threads.sgml b/docs/reference/glib/tmpl/threads.sgml index 0a0b7261b..b14768e77 100644 --- a/docs/reference/glib/tmpl/threads.sgml +++ b/docs/reference/glib/tmpl/threads.sgml @@ -13,11 +13,12 @@ and thread private data. Threads act almost like processes, but unlike processes all threads of one process share the same memory. This is good, as it provides easy communication between the involved threads via this shared memory, and -it is bad, because strange things (so called Heisenbugs) might happen, -when the program is not carefully designed. Especially bad is, that due -to the concurrent nature of threads no assumptions on the order of -execution of different threads can be done unless explicitly forced by -the programmer through synchronization primitives. +it is bad, because strange things (so called "Heisenbugs") might +happen if the program is not carefully designed. In particular, due to +the concurrent nature of threads, no assumptions on the order of +execution of code running in different threads can be made, unless +order is explicitly forced by the programmer through synchronization +primitives. @@ -25,21 +26,22 @@ The aim of the thread related functions in GLib is to provide a portable means for writing multi-threaded software. There are primitives for mutexes to protect the access to portions of memory (#GMutex, #GStaticMutex, #G_LOCK_DEFINE, #GStaticRecMutex and -#GStaticRWLock), there are primitives for condition variables to allow -synchronization of threads (#GCond) and finally there are primitives -for thread-private data, that every thread has a private instance of +#GStaticRWLock). There are primitives for condition variables to allow +synchronization of threads (#GCond). There are primitives +for thread-private data - data that every thread has a private instance of (#GPrivate, #GStaticPrivate). Last but definitely not least there are primitives to portably create and manage threads (#GThread). -You must call g_thread_init() before executing any other GLib functions -in a threaded GLib program. After that, GLib is completely thread safe -(all global data is automatically locked). But individual data structure -instances are not automatically locked for performance reasons. So e.g. -you must coordinate accesses to the same #GHashTable from multiple threads. -The two notable exceptions from this rule are #GMainLoop and #GAsyncQueue, -which are threadsafe and needs no further +You must call g_thread_init() before executing any other GLib +functions in a threaded GLib program. After that, GLib is completely +thread safe (all global data is automatically locked), but individual +data structure instances are not automatically locked for performance +reasons. So, for example you must coordinate accesses to the same +#GHashTable from multiple threads. The two notable exceptions from +this rule are #GMainLoop and #GAsyncQueue, +which are threadsafe and needs no further application-level locking to be accessed from multiple threads. @@ -66,11 +68,12 @@ application-level locking to be accessed from multiple threads. -This macro is defined, if GLib was compiled with thread support. This -does not necessarily mean, that there is a thread implementation -available, but the infrastructure is in place and once you provide a -thread implementation to g_thread_init(), GLib will be multi-thread -safe. It isn't and cannot be, if #G_THREADS_ENABLED is not defined. +This macro is defined if GLib was compiled with thread support. This +does not necessarily mean that there is a thread implementation +available, but it does mean that the infrastructure is in place and +that once you provide a thread implementation to g_thread_init(), GLib +will be multi-thread safe. If #G_THREADS_ENABLED is not defined, then +Glib is not, and cannot be, multi-thread safe. @@ -78,7 +81,7 @@ safe. It isn't and cannot be, if #G_THREADS_ENABLED is not defined. -This macro is defined, if POSIX style threads are used. +This macro is defined if POSIX style threads are used. @@ -86,8 +89,8 @@ This macro is defined, if POSIX style threads are used. -This macro is defined, if no thread implementation is used. You can -however provide one to g_thread_init() to make GLib multi-thread safe. +This macro is defined if no thread implementation is used. You can, +however, provide one to g_thread_init() to make GLib multi-thread safe. @@ -111,15 +114,15 @@ shortage. Try again later. This function table is used by g_thread_init() to initialize the -thread system. The functions in that table are directly used by their -g_* prepended counterparts, that are described here, e.g. if you call -g_mutex_new() then mutex_new() from the table provided to +thread system. The functions in the table are directly used by their +g_* prepended counterparts (described in this document). For example, +if you call g_mutex_new() then mutex_new() from the table provided to g_thread_init() will be called. -This struct should only be used, if you know, what you are doing. +Do not use this struct unless you know what you are doing. @@ -155,7 +158,7 @@ will only have to call g_thread_init (NULL). -You should only call g_thread_init() with a non-%NULL parameter if you +Do not call g_thread_init() with a non-%NULL parameter unless you really know what you are doing. @@ -163,15 +166,15 @@ really know what you are doing. g_thread_init() must not be called directly or indirectly as a -callback from GLib. Also no mutexes may be currently locked, while +callback from GLib. Also no mutexes may be currently locked while calling g_thread_init(). g_thread_init() might only be called once. On the second call -it will abort with an error. If you want to make sure, that the thread -system is initialized, you can do that too: +it will abort with an error. If you want to make sure that the thread +system is initialized, you can do this: @@ -183,9 +186,10 @@ if (!g_thread_supported ()) g_thread_init (NULL); -After that line either the thread system is initialized or the program -will abort, if no thread system is available in GLib, i.e. either -#G_THREADS_ENABLED is not defined or #G_THREADS_IMPL_NONE is defined. +After that line, either the thread system is initialized or, if no +thread system is available in GLib (i.e. either #G_THREADS_ENABLED is +not defined or #G_THREADS_IMPL_NONE is defined), the program will +abort. @@ -208,8 +212,8 @@ entry points to the thread system to be used. -This function returns, whether the thread system is initialized or -not. +This function returns %TRUE if the thread system is initialized, and +%FALSE if it is not. @@ -240,7 +244,7 @@ Specifies the priority of a thread. -It is not guaranteed, that threads with different priorities really +It is not guaranteed that threads with different priorities really behave accordingly. On some systems (e.g. Linux) there are no thread priorities. On other systems (e.g. Solaris) there doesn't seem to be different scheduling for different priorities. All in all try to avoid @@ -275,8 +279,8 @@ This function creates a new thread with the default priority. If @joinable is %TRUE, you can wait for this threads termination -calling g_thread_join(). Otherwise the thread will just disappear, when -ready. +calling g_thread_join(). Otherwise the thread will just disappear when +it terminates. @@ -299,17 +303,19 @@ error is set, if and only if the function returns %NULL. This function creates a new thread with the priority @priority. If the -underlying thread implementation supports it, the thread gets a stack size -of @stack_size or the default value for the current platform, if @stack_size is 0. +underlying thread implementation supports it, the thread gets a stack +size of @stack_size or the default value for the current platform, if +@stack_size is 0. If @joinable is %TRUE, you can wait for this threads termination -calling g_thread_join(). Otherwise the thread will just disappear, when -ready. If @bound is %TRUE, this thread will be scheduled in the system -scope, otherwise the implementation is free to do scheduling in the -process scope. The first variant is more expensive resource-wise, but -generally faster. On some systems (e.g. Linux) all threads are bound. +calling g_thread_join(). Otherwise the thread will just disappear when +it terminates. If @bound is %TRUE, this thread will be scheduled in +the system scope, otherwise the implementation is free to do +scheduling in the process scope. The first variant is more expensive +resource-wise, but generally faster. On some systems (e.g. Linux) all +threads are bound. @@ -324,7 +330,7 @@ error is set, if and only if the function returns %NULL. -It is not guaranteed, that threads with different priorities really +It is not guaranteed that threads with different priorities really behave accordingly. On some systems (e.g. Linux) there are no thread priorities. On other systems (e.g. Solaris) there doesn't seem to be different scheduling for different priorities. All in all try to avoid @@ -335,10 +341,10 @@ default. -Only use g_thread_create_full(), when you really can't use +Only use g_thread_create_full() if you really can't use g_thread_create() instead. g_thread_create() does not take -@stack_size, @bound and @priority as arguments, as they should only be -used for cases, where it is inevitable. +@stack_size, @bound, and @priority as arguments, as they should only +be used in cases in which it is unavoidable. @@ -381,7 +387,7 @@ Changes the priority of @thread to @priority. -It is not guaranteed, that threads with different priorities really +It is not guaranteed that threads with different priorities really behave accordingly. On some systems (e.g. Linux) there are no thread priorities. On other systems (e.g. Solaris) there doesn't seem to be different scheduling for different priorities. All in all try to avoid @@ -400,8 +406,8 @@ Gives way to other threads waiting to be scheduled. This function is often used as a method to make busy wait less -evil. But in most cases, you will encounter, there are better methods -to do that. So in general you shouldn't use that function. +evil. But in most cases you will encounter, there are better methods +to do that. So in general you shouldn't use this function. @@ -410,7 +416,7 @@ to do that. So in general you shouldn't use that function. Exits the current thread. If another thread is waiting for that thread using g_thread_join() and the current thread is joinable, the waiting -thread will be woken up and getting @retval as the return value of +thread will be woken up and get @retval as the return value of g_thread_join(). If the current thread is not joinable, @retval is ignored. Calling @@ -482,7 +488,7 @@ access. Take for example the following function: -It is easy to see, that this won't work in a multi-threaded +It is easy to see that this won't work in a multi-threaded application. There current_number must be protected against shared access. A first naive implementation would be: @@ -510,8 +516,8 @@ access. A first naive implementation would be: This looks like it would work, but there is a race condition while -constructing the mutex and this code cannot work reliable. So please do -not use such constructs in your own programs. One working solution is: +constructing the mutex and this code cannot work reliable. Please do +not use such constructs in your own programs! One working solution is: @@ -547,9 +553,10 @@ not use such constructs in your own programs. One working solution is: -If you want to use a mutex, but your code should also work without -calling g_thread_init() first, you can not use a #GMutex, as -g_mutex_new() requires that. Use a #GStaticMutex instead. +If you want to use a mutex, and your code should also work without +calling g_thread_init() first, then you can not use a #GMutex, as +g_mutex_new() requires that the thread system be initialized. Use a +#GStaticMutex instead. @@ -573,7 +580,7 @@ Creates a new #GMutex. -This function will abort, if g_thread_init() has not been called yet. +This function will abort if g_thread_init() has not been called yet. @@ -589,8 +596,8 @@ thread. -This function can also be used, if g_thread_init() has not yet been -called and will do nothing then. +This function can be used even if g_thread_init() has not yet been +called, and, in that case, will do nothing. @@ -614,8 +621,8 @@ and returns %TRUE. -This function can also be used, if g_thread_init() has not yet been -called and will immediately return %TRUE then. +This function can be used even if g_thread_init() has not yet been +called, and, in that case, will immediately return %TRUE. @@ -639,8 +646,8 @@ for @mutex, it will be woken and can lock @mutex itself. -This function can also be used, if g_thread_init() has not yet been -called and will do nothing then. +This function can be used even if g_thread_init() has not yet been +called, and, in that case, will do nothing. @mutex: a #GMutex. @@ -702,7 +709,7 @@ platforms. All of the g_static_mutex_* functions can also be -used, if g_thread_init() has not yet been called. +used even if g_thread_init() has not yet been called. @@ -802,11 +809,11 @@ you should also free the #GStaticMutex. The %G_LOCK_* macros provide a convenient interface to #GStaticMutex with the advantage that they will expand to nothing in programs compiled against a thread-disabled GLib, saving code and memory -there. #G_LOCK_DEFINE defines a lock. It can appear, where variable +there. #G_LOCK_DEFINE defines a lock. It can appear anywhere variable definitions may appear in programs, i.e. in the first block of a function or outside of functions. The @name parameter will be mangled -to get the name of the #GStaticMutex. This means, that you can use -names of existing variables as the parameter, e.g. the name of the +to get the name of the #GStaticMutex. This means that you can use +names of existing variables as the parameter - e.g. the name of the variable you intent to protect with the lock. Look at our give_me_next_number() example using the %G_LOCK_* macros: @@ -883,12 +890,13 @@ Works like g_mutex_unlock(), but for a lock defined with #G_LOCK_DEFINE. A #GStaticRecMutex works like a #GStaticMutex, but it can be locked -multiple times by one thread. If you enter it n times, however, you -have to unlock it n times again to let other threads lock it. An -exception is the function g_static_rec_mutex_unlock_full(), that -allows you to unlock a #GStaticRecMutex completely returning the depth, -i.e. the number of times this mutex was locked. The depth can later be -used to restore the state by calling g_static_rec_mutex_lock_full(). +multiple times by one thread. If you enter it n times, you have to +unlock it n times again to let other threads lock it. An exception is +the function g_static_rec_mutex_unlock_full(): that allows you to +unlock a #GStaticRecMutex completely returning the depth, (i.e. the +number of times this mutex was locked). The depth can later be used to +restore the state of the #GStaticRecMutex by calling +g_static_rec_mutex_lock_full(). @@ -897,14 +905,14 @@ the following functions. -All of the g_static_rec_mutex_* functions can also -be used, if g_thread_init() has not been called. +All of the g_static_rec_mutex_* functions can +be used even if g_thread_init() has not been called. -A #GStaticRecMutex must be initialized with this macro, before it can +A #GStaticRecMutex must be initialized with this macro before it can be used. This macro can used be to initialize a variable, but it cannot be assigned to a variable. In that case you have to use g_static_rec_mutex_init(). @@ -922,7 +930,7 @@ GStaticRecMutex my_mutex = G_STATIC_REC_MUTEX_INIT; -A #GStaticRecMutex must be initialized with this function, before it +A #GStaticRecMutex must be initialized with this function before it can be used. Alternatively you can initialize it with #G_STATIC_REC_MUTEX_INIT. @@ -955,11 +963,11 @@ functions increases the depth of @mutex and immediately returns %TRUE. -Unlocks @mutex. Another threads can, however, only lock @mutex when it -has been unlocked as many times, as it had been locked before. If -@mutex is completely unlocked and another thread is blocked in a -g_static_rec_mutex_lock() call for @mutex, it will be woken and can -lock @mutex itself. +Unlocks @mutex. Another thread can will be allowed to lock @mutex only +when it has been unlocked as many times as it had been locked +before. If @mutex is completely unlocked and another thread is blocked +in a g_static_rec_mutex_lock() call for @mutex, it will be woken and +can lock @mutex itself. @mutex: a #GStaticRecMutex to unlock. @@ -978,7 +986,7 @@ Works like calling g_static_rec_mutex_lock() for @mutex @depth times. Completely unlocks @mutex. If another thread is blocked in a g_static_rec_mutex_lock() call for @mutex, it will be woken and can -lock @mutex itself. This function returns the number of times, that +lock @mutex itself. This function returns the number of times that @mutex has been locked by the current thread. To restore the state before the call to g_static_rec_mutex_unlock_full() you can call g_static_rec_mutex_lock_full() with the depth returned by this @@ -1007,9 +1015,9 @@ freed, you should also free the #GStaticRecMutex. The #GStaticRWLock struct represents a read-write lock. A read-write -lock can be used for protecting data, that some portions of code only +lock can be used for protecting data that some portions of code only read from, while others also write. In such situations it is -desirable, that several readers can read at once, whereas of course +desirable that several readers can read at once, whereas of course only one writer may write at a time. Take a look at the following example: @@ -1056,19 +1064,19 @@ example: -This example shows an array, which can be accessed by many readers +This example shows an array which can be accessed by many readers (the my_array_get() function) simultaneously, whereas the writers (the my_array_set() function) -will only be allowed once a time and only if no readers currently access +will only be allowed once at a time and only if no readers currently access the array. This is because of the potentially dangerous resizing of the array. Using these functions is fully multi-thread safe now. -Most of the time the writers should have precedence of readers. That -means for this implementation, that as soon as a writer wants to lock -the data, no other reader is allowed to lock the data, whereas of -course the readers, that already have locked the data are allowed to +Most of the time, writers should have precedence over readers. That +means, for this implementation, that as soon as a writer wants to lock +the data, no other reader is allowed to lock the data, whereas, of +course, the readers that already have locked the data are allowed to finish their operation. As soon as the last reader unlocks the data, the writer will lock it. @@ -1079,18 +1087,18 @@ the following functions. -All of the g_static_rw_lock_* functions can also be -used, if g_thread_init() has not been called. +All of the g_static_rw_lock_* functions can be +used even if g_thread_init() has not been called. -A read-write lock has a higher overhead as a mutex. For example both +A read-write lock has a higher overhead than a mutex. For example, both g_static_rw_lock_reader_lock() and g_static_rw_lock_reader_unlock() have to lock and unlock a #GStaticMutex, so it takes at least twice the -time to lock and unlock a #GStaticRWLock than to lock and unlock a -#GStaticMutex. So only data structures, that are accessed by multiple -readers, which keep the lock for a considerable time justify a +time to lock and unlock a #GStaticRWLock that it does to lock and unlock a +#GStaticMutex. So only data structures that are accessed by multiple +readers, and which keep the lock for a considerable time justify a #GStaticRWLock. The above example most probably would fare better with a #GStaticMutex. @@ -1099,7 +1107,7 @@ a #GStaticMutex. -A #GStaticRWLock must be initialized with this macro, before it can +A #GStaticRWLock must be initialized with this macro before it can be used. This macro can used be to initialize a variable, but it cannot be assigned to a variable. In that case you have to use g_static_rw_lock_init(). @@ -1117,7 +1125,7 @@ GStaticRWLock my_lock = G_STATIC_RW_LOCK_INIT; -A #GStaticRWLock must be initialized with this function, before it can +A #GStaticRWLock must be initialized with this function before it can be used. Alternatively you can initialize it with #G_STATIC_RW_LOCK_INIT. @@ -1138,8 +1146,8 @@ g_static_rw_lock_reader_unlock(). #GStaticRWLock is not recursive. It might seem to be possible to -recursively lock for reading, but that can result in a deadlock as -well, due to writer preference. +recursively lock for reading, but that can result in a deadlock, due +to writer preference. @lock: a #GStaticRWLock to lock for reading. @@ -1149,9 +1157,9 @@ well, due to writer preference. Tries to lock @lock for reading. If @lock is already locked for writing by another thread or if another thread is already waiting to -lock @lock for writing, it immediately returns %FALSE. Otherwise it -locks @lock for reading and returns %TRUE. This lock has to be unlocked -by g_static_rw_lock_reader_unlock(). +lock @lock for writing, immediately returns %FALSE. Otherwise locks +@lock for reading and returns %TRUE. This lock has to be unlocked by +g_static_rw_lock_reader_unlock(). @lock: a #GStaticRWLock to lock for reading. @@ -1196,11 +1204,12 @@ lock has to be unlocked by g_static_rw_lock_writer_unlock(). -Unlocks @lock. If a thread waits to lock @lock for writing and all -locks for reading have been unlocked, the waiting thread is woken up -and can lock @lock for writing. If no thread waits to lock @lock for -writing and threads wait to lock @lock for reading, the waiting -threads are woken up and can lock @lock for reading. +Unlocks @lock. If a thread is waiting to lock @lock for writing and +all locks for reading have been unlocked, the waiting thread is woken +up and can lock @lock for writing. If no thread is waiting to lock +@lock for writing, and some thread or threads are waiting to lock @lock +for reading, the waiting threads are woken up and can lock @lock for +reading. @lock: a #GStaticRWLock to unlock after writing. @@ -1214,7 +1223,7 @@ Releases all resources allocated to @lock. You don't have to call this functions for a #GStaticRWLock with an unbounded lifetime, i.e. objects declared 'static', but if you have a -#GStaticRWLock as a member of a structure and the structure is freed, +#GStaticRWLock as a member of a structure, and the structure is freed, you should also free the #GStaticRWLock. @@ -1224,11 +1233,11 @@ you should also free the #GStaticRWLock. -The #GCond struct is an opaque data structure to represent a -condition. A #GCond is an object, that threads can block on, if they -find a certain condition to be false. If other threads change the -state of this condition they can signal the #GCond, such that the -waiting thread is woken up. +The #GCond struct is an opaque data structure that represents a +condition. Threads can block on a #GCond if they find a certain +condition to be false. If other threads change the state of this +condition they signal the #GCond, and that causes the waiting threads +to be woken up. @@ -1272,11 +1281,11 @@ has called push_data(). It is important to use the g_cond_wait() and g_cond_timed_wait() -functions only inside a loop, which checks for the condition to be -true as it is not guaranteed that the waiting thread will find it -fulfilled, even if the signaling thread left the condition -in that state. This is because another thread can have altered the -condition, before the waiting thread got the chance to be woken up, +functions only inside a loop which checks for the condition to be +true. It is not guaranteed that the waiting thread will find the +condition fulfilled after it wakes up, even if the signaling thread +left the condition in that state: another thread may have altered the +condition before the waiting thread got the chance to be woken up, even if the condition itself is protected by a #GMutex, like above. @@ -1307,13 +1316,13 @@ has not been called yet. If threads are waiting for @cond, exactly one of them is woken up. It -is good practice to hold the same lock as the waiting thread, while +is good practice to hold the same lock as the waiting thread while calling this function, though not required. -This function can also be used, if g_thread_init() has -not yet been called and will do nothing then. +This function can be used even if g_thread_init() has not yet been called, +and, in that case, will do nothing. @cond: a #GCond. @@ -1328,8 +1337,8 @@ this function, though not required. -This function can also be used, if g_thread_init() has -not yet been called and will do nothing then. +This function can be used even if g_thread_init() has not yet been called, +and, in that case, will do nothing. @cond: a #GCond. @@ -1343,8 +1352,8 @@ before falling asleep and locked again before resuming. -This function can also be used, if g_thread_init() has not yet been -called and will immediately return then. +This function can be used even if g_thread_init() has not yet been +called, and, in that case, will immediately return. @cond: a #GCond. @@ -1355,7 +1364,7 @@ called and will immediately return then. Waits until this thread is woken up on @cond, but not longer than -until the time, that is specified by @abs_time. The @mutex is +until the time specified by @abs_time. The @mutex is unlocked before falling asleep and locked again before resuming. @@ -1364,8 +1373,8 @@ If @abs_time is %NULL, g_cond_timed_wait() acts like g_cond_wait(). -This function can also be used, if g_thread_init() has not yet been -called and will immediately return %TRUE then. +This function can be used even if g_thread_init() has not yet been +called, and, in that case, will immediately return %TRUE. @@ -1374,9 +1383,9 @@ and g_time_val_add() can be used. @cond: a #GCond. -@mutex: a #GMutex, that is currently locked. +@mutex: a #GMutex that is currently locked. @abs_time: a #GTimeVal, determining the final time. -@Returns: %TRUE, if the thread is woken up in time. +@Returns: %TRUE if @cond was signalled, or %FALSE on timeout. @@ -1391,11 +1400,11 @@ Destroys the #GCond. The #GPrivate struct is an opaque data structure to represent a thread -private data key. Threads can thereby obtain and set a pointer, which +private data key. Threads can thereby obtain and set a pointer which is private to the current thread. Take our give_me_next_number() example from above. -Now we don't want current_number to be shared -between the threads, but to be private to each thread. This can be +Suppose we don't want current_number to be shared +between the threads, but instead to be private to each thread. This can be done as follows: @@ -1425,7 +1434,7 @@ done as follows: Here the pointer belonging to the key current_number_key is read. If it is %NULL, it has not been set yet. Then get memory for an integer value, assign this memory to the pointer and write the pointer -back. Now we have an integer value, that is private to the current thread. +back. Now we have an integer value that is private to the current thread. @@ -1452,25 +1461,25 @@ destructor is called with this pointer as the argument. -@destructor is working quite differently from @notify in +@destructor is used quite differently from @notify in g_static_private_set(). -A #GPrivate can not be freed. Reuse it instead, if you can to avoid -shortage or use #GStaticPrivate. +A #GPrivate can not be freed. Reuse it instead, if you can, to avoid +shortage, or use #GStaticPrivate. -This function will abort, if g_thread_init() has not been called yet. +This function will abort if g_thread_init() has not been called yet. -@destructor: a function to handle the data keyed to #GPrivate, when a +@destructor: a function to destroy the data keyed to #GPrivate when a thread ends. @Returns: a new #GPrivate. @@ -1478,14 +1487,14 @@ thread ends. -Returns the pointer keyed to @private_key for the current thread. This -pointer is %NULL, when g_private_set() hasn't been called for the -current @private_key and thread yet. +Returns the pointer keyed to @private_key for the current thread. +If g_private_set() hasn't been called for the +current @private_key and thread yet, this pointer will be %NULL. -This function can also be used, if g_thread_init() has not yet been -called and will return the value of @private_key casted to #gpointer then. +This function can be used even if g_thread_init() has not yet been +called, and, in that case, will return the value of @private_key casted to #gpointer. @private_key: a #GPrivate. @@ -1499,8 +1508,8 @@ Sets the pointer keyed to @private_key for the current thread. -This function can also be used, if g_thread_init() has not yet been -called and will set @private_key to @data casted to #GPrivate* then. +This function can be used even if g_thread_init() has not yet been +called, and, in that case, will set @private_key to @data casted to #GPrivate*. @private_key: a #GPrivate. @@ -1571,7 +1580,7 @@ Works like g_private_get() only for a #GStaticPrivate. -This function also works, if g_thread_init() has not yet been called. +This function works even if g_thread_init() has not yet been called. @private_key: a #GStaticPrivate. @@ -1586,7 +1595,7 @@ whenever the pointer is set again or whenever the current thread ends. -This function also works, if g_thread_init() has not yet been +This function works even if g_thread_init() has not yet been called. If g_thread_init() is called later, the @data keyed to @private_key will be inherited only by the main thread, i.e. the one that called g_thread_init(). @@ -1594,14 +1603,14 @@ called g_thread_init(). -@notify is working quite differently from @destructor in +@notify is used quite differently from @destructor in g_private_new(). @private_key: a #GStaticPrivate. @data: the new pointer. -@notify: a function to be called with the pointer, whenever the +@notify: a function to be called with the pointer whenever the current thread ends or sets this pointer again. @@ -1634,7 +1643,7 @@ function. Any one-time initialization function must have its own unique -The possible stati of a one-time initialization function controlled by a #GOnce struct. +The possible statuses of a one-time initialization function controlled by a #GOnce struct. @G_ONCE_STATUS_NOTCALLED: the function has not been called yet. @@ -1644,7 +1653,7 @@ The possible stati of a one-time initialization function controlled by a #GOnce -A #GOnce must be initialized with this macro, before it can be used. +A #GOnce must be initialized with this macro before it can be used. diff --git a/docs/reference/gobject/tmpl/gtype.sgml b/docs/reference/gobject/tmpl/gtype.sgml index 83bd23962..26dfbd49d 100644 --- a/docs/reference/gobject/tmpl/gtype.sgml +++ b/docs/reference/gobject/tmpl/gtype.sgml @@ -58,7 +58,7 @@ type. Returns the fundamental type which is the ancestor of @type. -Fundamental types are types that serve as fundaments for the derived types, +Fundamental types are types that serve as ultimate bases for the derived types, thus they are the roots of distinct inheritance hierarchies. @@ -113,7 +113,7 @@ Returns %TRUE if @type is a fundamental type. -Returns %TRUE if @type is a value type which can be used for +Returns %TRUE if @type is a value type and can be used with g_value_init(). @@ -166,7 +166,7 @@ can be used as the base class of a deep (multi-level) class hierarchy. Returns %TRUE if @type is an interface type. -Interface types are types that provide pure APIs, the implementation +An interface type provides a pure API, the implementation of which is provided by another type (which is then said to conform to the interface). GLib interfaces are somewhat analogous to Java interfaces and C++ classes containing only pure virtual functions, @@ -199,11 +199,11 @@ An opaque structure used as the base of all classes. This structure is used to provide the type system with the information required to initialize and destruct (finalize) a type's class and -instances thereof. +its instances. The initialized structure is passed to the g_type_register_static() function (or is copied into the provided #GTypeInfo structure in the g_type_plugin_complete_type_info()). The type system will perform a deep -copy of this structure, so it's memory does not need to be persistent +copy of this structure, so its memory does not need to be persistent across invocation of g_type_register_static(). @@ -295,8 +295,8 @@ to serve as a container for values of a type. } @collect_format: A string format describing how to collect the contents of - this value, bit-by-bit. Each character in the format represents - an argument to be collected, the characters themselves indicate + this value bit-by-bit. Each character in the format represents + an argument to be collected, and the characters themselves indicate the type of the argument. Currently supported arguments are: @@ -312,14 +312,14 @@ to serve as a container for values of a type. 'p' - Pointers. passed as collect_values[].v_pointer. - It should be noted, that for variable argument list construction, + It should be noted that for variable argument list construction, ANSI C promotes every type smaller than an integer to an int, and floats to doubles. So for collection of short int or char, 'i' needs to be used, and for collection of floats 'd'. @collect_value: The collect_value() function is responsible for converting the values collected from a variable argument list into contents suitable for storage in a GValue. This function should setup - @value similar to value_init(), e.g. for a string value that + @value similar to value_init(); e.g. for a string value that does not allow %NULL pointers, it needs to either spew an error, or do an implicit conversion by storing an empty string. The @value passed in to this function has a zero-filled data @@ -329,8 +329,8 @@ to serve as a container for values of a type. and @collect_values is an array of unions #GTypeCValue with length @n_collect_values, containing the collected values according to @collect_format. - @collect_flags is an argument provided as a hint by the caller, - which may contain the flag #G_VALUE_NOCOPY_CONTENTS indicating, + @collect_flags is an argument provided as a hint by the caller. + It may contain the flag #G_VALUE_NOCOPY_CONTENTS indicating, that the collected value contents may be considered "static" for the duration of the @value lifetime. Thus an extra copy of the contents stored in @collect_values is @@ -376,8 +376,8 @@ to serve as a container for values of a type. The reference count for valid objects is always incremented, regardless of @collect_flags. For invalid objects, the example returns a newly allocated string without altering @value. - Upon success, collect_value() needs to return %NULL, if however - a malicious condition occurred, collect_value() may spew an + Upon success, collect_value() needs to return %NULL. If, however, + an error condition occurred, collect_value() may spew an error by returning a newly allocated non-%NULL string, giving a suitable description of the error condition. The calling code makes no assumptions about the @value @@ -415,7 +415,7 @@ to serve as a container for values of a type. } - And an exemplary version of lcopy_value() for + And an illustrative version of lcopy_value() for reference-counted types: { @@ -666,7 +666,7 @@ Return the corresponding quark of the type IDs name. -Lookup the type ID from a given type name, returns 0 if no type has been registered under this name +Lookup the type ID from a given type name, returning 0 if no type has been registered under this name (this is the preferred method to find out by name whether a specific type has been registered yet). @@ -734,7 +734,7 @@ exist already. This function is essentially the same as g_type_class_ref(), except that -the classes reference count isn't incremented. Therefore, this function +the classes reference count isn't incremented. As a consequence, this function may return %NULL if the class of the type passed in does not currently exist (hasn't been referenced before). @@ -769,9 +769,9 @@ class pointer after g_type_class_unref() are invalid. -This is a convenience function, often needed in class initializers. -It essentially takes the immediate parent type of the class passed in, -and returns the class structure thereof. Since derived classes hold +This is a convenience function often needed in class initializers. +It returns the class structure of the immediate parent type of the class passed in. +Since derived classes hold a reference count on their parent classes as long as they are instantiated, the returned class will always exist. This function is essentially equivalent to: @@ -886,7 +886,7 @@ its default interface vtable. @g_type: an interface type -@Returns: the default vtable for the interface; or %NULL +@Returns: the default vtable for the interface, or %NULL if the type is not currently in use. @Since: 2.4 @@ -993,7 +993,7 @@ A callback function used by the type system to do base initialization of the class structures of derived types. It is called as part of the initialization process of all derived classes and should reallocate or reset all dynamic class members copied over from the parent class. -Therefore class members, e.g. strings, that are not sufficiently +For example, class members (such as strings) that are not sufficiently handled by a plain memory copy of the parent class into the derived class have to be altered. See GClassInitFunc() for a discussion of the class intialization process. @@ -1097,8 +1097,8 @@ Initialization of TypeBClass will first cause initialization of TypeAClass (derived classes reference their parent classes, see g_type_class_ref() on this). Initialization of TypeAClass roughly involves zero-initializing its fields, -then calling its GBaseInitFunc() type_a_base_class_init() that allocates -its dynamic members (dynamic_string) and finally calling its GClassInitFunc() +then calling its GBaseInitFunc() type_a_base_class_init() to allocate +its dynamic members (dynamic_string), and finally calling its GClassInitFunc() type_a_class_init() to initialize its static members (static_integer). The first step in the initialization process of TypeBClass is then a plain memory copy of the contents of TypeAClass into TypeBClass and @@ -1141,7 +1141,7 @@ A callback function used by the type system to initialize a new instance of a type. This function initializes all instance members and allocates any resources required by it. Initialization of a derived instance involves calling all its parent -types instance initializers, therefore the class member of the instance +types instance initializers, so the class member of the instance is altered during its initialization to always point to the class that belongs to the type the current initializer was introduced for. @@ -1223,7 +1223,7 @@ instances (if not abstract). The value of @flags determines the nature (e.g. abstract or not) of the type. -@parent_type: Type which this type will be derived from. +@parent_type: Type from which this type will be derived. @type_name: 0-terminated string used as the name of the new type. @info: The #GTypeInfo structure for this type. @flags: Bitwise combination of #GTypeFlags values. @@ -1238,7 +1238,7 @@ abstract or not) of the type. It works by filling a #GTypeInfo struct and calling g_type_info_register_static(). -@parent_type: Type which this type will be derived from. +@parent_type: Type from which this type will be derived. @type_name: 0-terminated string used as the name of the new type. @class_size: Size of the class structure (see #GTypeInfo) @class_init: Location of the class initialization function (see #GTypeInfo) @@ -1258,7 +1258,7 @@ instances (if not abstract). The value of @flags determines the nature (e.g. abstract or not) of the type. -@parent_type: Type which this type will be derived from. +@parent_type: Type from which this type will be derived. @type_name: 0-terminated string used as the name of the new type. @plugin: The #GTypePlugin structure to retrieve the #GTypeInfo from. @flags: Bitwise combination of #GTypeFlags values. @@ -1373,7 +1373,7 @@ use G_TYPE_FUNDAMENTAL() instead. Creates and initializes an instance of @type if @type is valid and can be instantiated. The type system only performs basic allocation and -structure setups for instances, actual instance creation should happen +structure setups for instances: actual instance creation should happen through functions supplied by the type's fundamental type implementation. So use of g_type_create_instance() is reserved for implementators of fundamental types only. E.g. instances of the #GObject hierarchy @@ -1442,8 +1442,8 @@ otherwise. Adds a function to be called after an interface vtable is -initialized for any class. That is, after the @interface_init -member of #GInterfaceInfo has been called. +initialized for any class (i.e. after the @interface_init +member of #GInterfaceInfo has been called). This function is useful when you want to check an invariant @@ -1484,7 +1484,7 @@ See g_type_add_interface_check(). Returns the location of the #GTypeValueTable associated with @type. -Note, this function should only be used from source code +Note that this function should only be used from source code that implements or has internal knowledge of the implementation of @type. @@ -1644,7 +1644,7 @@ init functions. -An invalid #GType, used as error return value in some functions which return +An invalid #GType used as error return value in some functions which return a #GType.