pango 0.90.5-x86-mingw32 → 0.90.6-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1348) hide show
  1. data/ChangeLog +16 -0
  2. data/Rakefile +8 -77
  3. data/ext/pango/Makefile +172 -0
  4. data/ext/pango/extconf.rb +24 -25
  5. data/ext/pango/rbpangolayoutiter.c +3 -1
  6. data/ext/pango/rbpangoversion.h +24 -0
  7. data/lib/1.8/pango.so +0 -0
  8. data/lib/1.9/pango.so +0 -0
  9. data/vendor/local/lib/pkgconfig/pango.pc +1 -1
  10. data/vendor/local/lib/pkgconfig/pangocairo.pc +1 -1
  11. data/vendor/local/lib/pkgconfig/pangoft2.pc +1 -1
  12. data/vendor/local/lib/pkgconfig/pangowin32.pc +1 -1
  13. metadata +153 -1484
  14. data/vendor/local/bin/envsubst.exe +0 -0
  15. data/vendor/local/bin/fc-cache.exe +0 -0
  16. data/vendor/local/bin/fc-cat.exe +0 -0
  17. data/vendor/local/bin/fc-list.exe +0 -0
  18. data/vendor/local/bin/freetype-config +0 -160
  19. data/vendor/local/bin/freetype6.dll +0 -0
  20. data/vendor/local/bin/gettext.exe +0 -0
  21. data/vendor/local/bin/gettext.sh +0 -123
  22. data/vendor/local/bin/glib-genmarshal.exe +0 -0
  23. data/vendor/local/bin/glib-gettextize +0 -188
  24. data/vendor/local/bin/glib-mkenums +0 -537
  25. data/vendor/local/bin/gobject-query.exe +0 -0
  26. data/vendor/local/bin/gspawn-win32-helper-console.exe +0 -0
  27. data/vendor/local/bin/gspawn-win32-helper.exe +0 -0
  28. data/vendor/local/bin/intl.dll +0 -0
  29. data/vendor/local/bin/libasprintf-0.dll +0 -0
  30. data/vendor/local/bin/libcairo-2.dll +0 -0
  31. data/vendor/local/bin/libcairo-gobject-2.dll +0 -0
  32. data/vendor/local/bin/libcairo-script-interpreter-2.dll +0 -0
  33. data/vendor/local/bin/libexpat-1.dll +0 -0
  34. data/vendor/local/bin/libfontconfig-1.dll +0 -0
  35. data/vendor/local/bin/libgcc_s_dw2-1.dll +0 -0
  36. data/vendor/local/bin/libgio-2.0-0.dll +0 -0
  37. data/vendor/local/bin/libglib-2.0-0.dll +0 -0
  38. data/vendor/local/bin/libgmodule-2.0-0.dll +0 -0
  39. data/vendor/local/bin/libgobject-2.0-0.dll +0 -0
  40. data/vendor/local/bin/libgthread-2.0-0.dll +0 -0
  41. data/vendor/local/bin/libpng14-14.dll +0 -0
  42. data/vendor/local/bin/ngettext.exe +0 -0
  43. data/vendor/local/bin/xmlwf.exe +0 -0
  44. data/vendor/local/bin/zlib1.dll +0 -0
  45. data/vendor/local/etc/fonts/fonts.conf +0 -151
  46. data/vendor/local/etc/fonts/fonts.dtd +0 -224
  47. data/vendor/local/include/autosprintf.h +0 -66
  48. data/vendor/local/include/cairo/cairo-deprecated.h +0 -123
  49. data/vendor/local/include/cairo/cairo-features.h +0 -27
  50. data/vendor/local/include/cairo/cairo-ft.h +0 -82
  51. data/vendor/local/include/cairo/cairo-gobject.h +0 -186
  52. data/vendor/local/include/cairo/cairo-pdf.h +0 -94
  53. data/vendor/local/include/cairo/cairo-ps.h +0 -114
  54. data/vendor/local/include/cairo/cairo-script-interpreter.h +0 -117
  55. data/vendor/local/include/cairo/cairo-svg.h +0 -82
  56. data/vendor/local/include/cairo/cairo-version.h +0 -8
  57. data/vendor/local/include/cairo/cairo-win32.h +0 -112
  58. data/vendor/local/include/cairo/cairo.h +0 -2684
  59. data/vendor/local/include/expat.h +0 -1014
  60. data/vendor/local/include/expat_external.h +0 -115
  61. data/vendor/local/include/fontconfig/fcfreetype.h +0 -59
  62. data/vendor/local/include/fontconfig/fcprivate.h +0 -123
  63. data/vendor/local/include/fontconfig/fontconfig.h +0 -963
  64. data/vendor/local/include/freetype2/freetype/config/ftconfig.h +0 -477
  65. data/vendor/local/include/freetype2/freetype/config/ftheader.h +0 -780
  66. data/vendor/local/include/freetype2/freetype/config/ftmodule.h +0 -20
  67. data/vendor/local/include/freetype2/freetype/config/ftoption.h +0 -733
  68. data/vendor/local/include/freetype2/freetype/config/ftstdlib.h +0 -173
  69. data/vendor/local/include/freetype2/freetype/freetype.h +0 -3919
  70. data/vendor/local/include/freetype2/freetype/ftadvanc.h +0 -179
  71. data/vendor/local/include/freetype2/freetype/ftbbox.h +0 -94
  72. data/vendor/local/include/freetype2/freetype/ftbdf.h +0 -209
  73. data/vendor/local/include/freetype2/freetype/ftbitmap.h +0 -227
  74. data/vendor/local/include/freetype2/freetype/ftcache.h +0 -1125
  75. data/vendor/local/include/freetype2/freetype/ftchapters.h +0 -103
  76. data/vendor/local/include/freetype2/freetype/ftcid.h +0 -166
  77. data/vendor/local/include/freetype2/freetype/fterrdef.h +0 -244
  78. data/vendor/local/include/freetype2/freetype/fterrors.h +0 -206
  79. data/vendor/local/include/freetype2/freetype/ftgasp.h +0 -120
  80. data/vendor/local/include/freetype2/freetype/ftglyph.h +0 -613
  81. data/vendor/local/include/freetype2/freetype/ftgxval.h +0 -358
  82. data/vendor/local/include/freetype2/freetype/ftgzip.h +0 -102
  83. data/vendor/local/include/freetype2/freetype/ftimage.h +0 -1301
  84. data/vendor/local/include/freetype2/freetype/ftincrem.h +0 -353
  85. data/vendor/local/include/freetype2/freetype/ftlcdfil.h +0 -213
  86. data/vendor/local/include/freetype2/freetype/ftlist.h +0 -277
  87. data/vendor/local/include/freetype2/freetype/ftlzw.h +0 -99
  88. data/vendor/local/include/freetype2/freetype/ftmac.h +0 -274
  89. data/vendor/local/include/freetype2/freetype/ftmm.h +0 -378
  90. data/vendor/local/include/freetype2/freetype/ftmodapi.h +0 -483
  91. data/vendor/local/include/freetype2/freetype/ftmoderr.h +0 -155
  92. data/vendor/local/include/freetype2/freetype/ftotval.h +0 -203
  93. data/vendor/local/include/freetype2/freetype/ftoutln.h +0 -537
  94. data/vendor/local/include/freetype2/freetype/ftpfr.h +0 -172
  95. data/vendor/local/include/freetype2/freetype/ftrender.h +0 -230
  96. data/vendor/local/include/freetype2/freetype/ftsizes.h +0 -159
  97. data/vendor/local/include/freetype2/freetype/ftsnames.h +0 -200
  98. data/vendor/local/include/freetype2/freetype/ftstroke.h +0 -716
  99. data/vendor/local/include/freetype2/freetype/ftsynth.h +0 -80
  100. data/vendor/local/include/freetype2/freetype/ftsystem.h +0 -347
  101. data/vendor/local/include/freetype2/freetype/fttrigon.h +0 -350
  102. data/vendor/local/include/freetype2/freetype/fttypes.h +0 -588
  103. data/vendor/local/include/freetype2/freetype/ftwinfnt.h +0 -274
  104. data/vendor/local/include/freetype2/freetype/ftxf86.h +0 -83
  105. data/vendor/local/include/freetype2/freetype/t1tables.h +0 -504
  106. data/vendor/local/include/freetype2/freetype/ttnameid.h +0 -1247
  107. data/vendor/local/include/freetype2/freetype/tttables.h +0 -759
  108. data/vendor/local/include/freetype2/freetype/tttags.h +0 -107
  109. data/vendor/local/include/freetype2/freetype/ttunpat.h +0 -59
  110. data/vendor/local/include/ft2build.h +0 -61
  111. data/vendor/local/include/glib-2.0/gio/gappinfo.h +0 -236
  112. data/vendor/local/include/glib-2.0/gio/gasyncinitable.h +0 -119
  113. data/vendor/local/include/glib-2.0/gio/gasyncresult.h +0 -73
  114. data/vendor/local/include/glib-2.0/gio/gbufferedinputstream.h +0 -123
  115. data/vendor/local/include/glib-2.0/gio/gbufferedoutputstream.h +0 -81
  116. data/vendor/local/include/glib-2.0/gio/gcancellable.h +0 -103
  117. data/vendor/local/include/glib-2.0/gio/gcharsetconverter.h +0 -60
  118. data/vendor/local/include/glib-2.0/gio/gcontenttype.h +0 -57
  119. data/vendor/local/include/glib-2.0/gio/gconverter.h +0 -95
  120. data/vendor/local/include/glib-2.0/gio/gconverterinputstream.h +0 -79
  121. data/vendor/local/include/glib-2.0/gio/gconverteroutputstream.h +0 -79
  122. data/vendor/local/include/glib-2.0/gio/gcredentials.h +0 -76
  123. data/vendor/local/include/glib-2.0/gio/gdatainputstream.h +0 -150
  124. data/vendor/local/include/glib-2.0/gio/gdataoutputstream.h +0 -115
  125. data/vendor/local/include/glib-2.0/gio/gdbusaddress.h +0 -58
  126. data/vendor/local/include/glib-2.0/gio/gdbusauthobserver.h +0 -46
  127. data/vendor/local/include/glib-2.0/gio/gdbusconnection.h +0 -562
  128. data/vendor/local/include/glib-2.0/gio/gdbuserror.h +0 -100
  129. data/vendor/local/include/glib-2.0/gio/gdbusintrospection.h +0 -286
  130. data/vendor/local/include/glib-2.0/gio/gdbusmessage.h +0 -149
  131. data/vendor/local/include/glib-2.0/gio/gdbusmethodinvocation.h +0 -73
  132. data/vendor/local/include/glib-2.0/gio/gdbusnameowning.h +0 -112
  133. data/vendor/local/include/glib-2.0/gio/gdbusnamewatching.h +0 -94
  134. data/vendor/local/include/glib-2.0/gio/gdbusproxy.h +0 -167
  135. data/vendor/local/include/glib-2.0/gio/gdbusserver.h +0 -54
  136. data/vendor/local/include/glib-2.0/gio/gdbusutils.h +0 -44
  137. data/vendor/local/include/glib-2.0/gio/gdrive.h +0 -225
  138. data/vendor/local/include/glib-2.0/gio/gemblem.h +0 -58
  139. data/vendor/local/include/glib-2.0/gio/gemblemedicon.h +0 -62
  140. data/vendor/local/include/glib-2.0/gio/gfile.h +0 -1017
  141. data/vendor/local/include/glib-2.0/gio/gfileattribute.h +0 -77
  142. data/vendor/local/include/glib-2.0/gio/gfileenumerator.h +0 -132
  143. data/vendor/local/include/glib-2.0/gio/gfileicon.h +0 -56
  144. data/vendor/local/include/glib-2.0/gio/gfileinfo.h +0 -952
  145. data/vendor/local/include/glib-2.0/gio/gfileinputstream.h +0 -112
  146. data/vendor/local/include/glib-2.0/gio/gfileiostream.h +0 -118
  147. data/vendor/local/include/glib-2.0/gio/gfilemonitor.h +0 -95
  148. data/vendor/local/include/glib-2.0/gio/gfilenamecompleter.h +0 -76
  149. data/vendor/local/include/glib-2.0/gio/gfileoutputstream.h +0 -119
  150. data/vendor/local/include/glib-2.0/gio/gfilterinputstream.h +0 -76
  151. data/vendor/local/include/glib-2.0/gio/gfilteroutputstream.h +0 -76
  152. data/vendor/local/include/glib-2.0/gio/gicon.h +0 -91
  153. data/vendor/local/include/glib-2.0/gio/ginetaddress.h +0 -103
  154. data/vendor/local/include/glib-2.0/gio/ginetsocketaddress.h +0 -69
  155. data/vendor/local/include/glib-2.0/gio/ginitable.h +0 -96
  156. data/vendor/local/include/glib-2.0/gio/ginputstream.h +0 -172
  157. data/vendor/local/include/glib-2.0/gio/gio.h +0 -122
  158. data/vendor/local/include/glib-2.0/gio/gioenums.h +0 -1221
  159. data/vendor/local/include/glib-2.0/gio/gioenumtypes.h +0 -121
  160. data/vendor/local/include/glib-2.0/gio/gioerror.h +0 -52
  161. data/vendor/local/include/glib-2.0/gio/giomodule.h +0 -132
  162. data/vendor/local/include/glib-2.0/gio/gioscheduler.h +0 -52
  163. data/vendor/local/include/glib-2.0/gio/giostream.h +0 -112
  164. data/vendor/local/include/glib-2.0/gio/giotypes.h +0 -375
  165. data/vendor/local/include/glib-2.0/gio/gloadableicon.h +0 -97
  166. data/vendor/local/include/glib-2.0/gio/gmemoryinputstream.h +0 -82
  167. data/vendor/local/include/glib-2.0/gio/gmemoryoutputstream.h +0 -98
  168. data/vendor/local/include/glib-2.0/gio/gmount.h +0 -242
  169. data/vendor/local/include/glib-2.0/gio/gmountoperation.h +0 -123
  170. data/vendor/local/include/glib-2.0/gio/gnativevolumemonitor.h +0 -62
  171. data/vendor/local/include/glib-2.0/gio/gnetworkaddress.h +0 -73
  172. data/vendor/local/include/glib-2.0/gio/gnetworkservice.h +0 -71
  173. data/vendor/local/include/glib-2.0/gio/goutputstream.h +0 -207
  174. data/vendor/local/include/glib-2.0/gio/gpermission.h +0 -118
  175. data/vendor/local/include/glib-2.0/gio/gproxy.h +0 -123
  176. data/vendor/local/include/glib-2.0/gio/gproxyaddress.h +0 -76
  177. data/vendor/local/include/glib-2.0/gio/gproxyaddressenumerator.h +0 -75
  178. data/vendor/local/include/glib-2.0/gio/gproxyresolver.h +0 -96
  179. data/vendor/local/include/glib-2.0/gio/gresolver.h +0 -167
  180. data/vendor/local/include/glib-2.0/gio/gseekable.h +0 -99
  181. data/vendor/local/include/glib-2.0/gio/gsettings.h +0 -258
  182. data/vendor/local/include/glib-2.0/gio/gsettingsbackend.h +0 -138
  183. data/vendor/local/include/glib-2.0/gio/gsimpleasyncresult.h +0 -125
  184. data/vendor/local/include/glib-2.0/gio/gsimplepermission.h +0 -45
  185. data/vendor/local/include/glib-2.0/gio/gsocket.h +0 -194
  186. data/vendor/local/include/glib-2.0/gio/gsocketaddress.h +0 -79
  187. data/vendor/local/include/glib-2.0/gio/gsocketaddressenumerator.h +0 -89
  188. data/vendor/local/include/glib-2.0/gio/gsocketclient.h +0 -152
  189. data/vendor/local/include/glib-2.0/gio/gsocketconnectable.h +0 -74
  190. data/vendor/local/include/glib-2.0/gio/gsocketconnection.h +0 -91
  191. data/vendor/local/include/glib-2.0/gio/gsocketcontrolmessage.h +0 -105
  192. data/vendor/local/include/glib-2.0/gio/gsocketlistener.h +0 -138
  193. data/vendor/local/include/glib-2.0/gio/gsocketservice.h +0 -88
  194. data/vendor/local/include/glib-2.0/gio/gsrvtarget.h +0 -52
  195. data/vendor/local/include/glib-2.0/gio/gtcpconnection.h +0 -68
  196. data/vendor/local/include/glib-2.0/gio/gthemedicon.h +0 -63
  197. data/vendor/local/include/glib-2.0/gio/gthreadedsocketservice.h +0 -81
  198. data/vendor/local/include/glib-2.0/gio/gvfs.h +0 -125
  199. data/vendor/local/include/glib-2.0/gio/gvolume.h +0 -211
  200. data/vendor/local/include/glib-2.0/gio/gvolumemonitor.h +0 -150
  201. data/vendor/local/include/glib-2.0/gio/gzlibcompressor.h +0 -60
  202. data/vendor/local/include/glib-2.0/gio/gzlibdecompressor.h +0 -57
  203. data/vendor/local/include/glib-2.0/glib-object.h +0 -42
  204. data/vendor/local/include/glib-2.0/glib.h +0 -99
  205. data/vendor/local/include/glib-2.0/glib/galloca.h +0 -110
  206. data/vendor/local/include/glib-2.0/glib/garray.h +0 -179
  207. data/vendor/local/include/glib-2.0/glib/gasyncqueue.h +0 -120
  208. data/vendor/local/include/glib-2.0/glib/gatomic.h +0 -105
  209. data/vendor/local/include/glib-2.0/glib/gbacktrace.h +0 -68
  210. data/vendor/local/include/glib-2.0/glib/gbase64.h +0 -57
  211. data/vendor/local/include/glib-2.0/glib/gbitlock.h +0 -43
  212. data/vendor/local/include/glib-2.0/glib/gbookmarkfile.h +0 -215
  213. data/vendor/local/include/glib-2.0/glib/gcache.h +0 -69
  214. data/vendor/local/include/glib-2.0/glib/gchecksum.h +0 -86
  215. data/vendor/local/include/glib-2.0/glib/gcompletion.h +0 -81
  216. data/vendor/local/include/glib-2.0/glib/gconvert.h +0 -162
  217. data/vendor/local/include/glib-2.0/glib/gdataset.h +0 -122
  218. data/vendor/local/include/glib-2.0/glib/gdate.h +0 -263
  219. data/vendor/local/include/glib-2.0/glib/gdatetime.h +0 -217
  220. data/vendor/local/include/glib-2.0/glib/gdir.h +0 -52
  221. data/vendor/local/include/glib-2.0/glib/gerror.h +0 -98
  222. data/vendor/local/include/glib-2.0/glib/gfileutils.h +0 -128
  223. data/vendor/local/include/glib-2.0/glib/ghash.h +0 -166
  224. data/vendor/local/include/glib-2.0/glib/ghook.h +0 -181
  225. data/vendor/local/include/glib-2.0/glib/ghostutils.h +0 -40
  226. data/vendor/local/include/glib-2.0/glib/gi18n-lib.h +0 -38
  227. data/vendor/local/include/glib-2.0/glib/gi18n.h +0 -34
  228. data/vendor/local/include/glib-2.0/glib/giochannel.h +0 -366
  229. data/vendor/local/include/glib-2.0/glib/gkeyfile.h +0 -266
  230. data/vendor/local/include/glib-2.0/glib/glist.h +0 -120
  231. data/vendor/local/include/glib-2.0/glib/gmacros.h +0 -284
  232. data/vendor/local/include/glib-2.0/glib/gmain.h +0 -531
  233. data/vendor/local/include/glib-2.0/glib/gmappedfile.h +0 -49
  234. data/vendor/local/include/glib-2.0/glib/gmarkup.h +0 -163
  235. data/vendor/local/include/glib-2.0/glib/gmem.h +0 -309
  236. data/vendor/local/include/glib-2.0/glib/gmessages.h +0 -343
  237. data/vendor/local/include/glib-2.0/glib/gnode.h +0 -290
  238. data/vendor/local/include/glib-2.0/glib/goption.h +0 -370
  239. data/vendor/local/include/glib-2.0/glib/gpattern.h +0 -49
  240. data/vendor/local/include/glib-2.0/glib/gpoll.h +0 -117
  241. data/vendor/local/include/glib-2.0/glib/gprimes.h +0 -51
  242. data/vendor/local/include/glib-2.0/glib/gprintf.h +0 -52
  243. data/vendor/local/include/glib-2.0/glib/gqsort.h +0 -46
  244. data/vendor/local/include/glib-2.0/glib/gquark.h +0 -52
  245. data/vendor/local/include/glib-2.0/glib/gqueue.h +0 -127
  246. data/vendor/local/include/glib-2.0/glib/grand.h +0 -85
  247. data/vendor/local/include/glib-2.0/glib/gregex.h +0 -471
  248. data/vendor/local/include/glib-2.0/glib/grel.h +0 -101
  249. data/vendor/local/include/glib-2.0/glib/gscanner.h +0 -278
  250. data/vendor/local/include/glib-2.0/glib/gsequence.h +0 -128
  251. data/vendor/local/include/glib-2.0/glib/gshell.h +0 -55
  252. data/vendor/local/include/glib-2.0/glib/gslice.h +0 -86
  253. data/vendor/local/include/glib-2.0/glib/gslist.h +0 -114
  254. data/vendor/local/include/glib-2.0/glib/gspawn.h +0 -139
  255. data/vendor/local/include/glib-2.0/glib/gstdio.h +0 -147
  256. data/vendor/local/include/glib-2.0/glib/gstrfuncs.h +0 -269
  257. data/vendor/local/include/glib-2.0/glib/gstring.h +0 -178
  258. data/vendor/local/include/glib-2.0/glib/gtestutils.h +0 -297
  259. data/vendor/local/include/glib-2.0/glib/gthread.h +0 -407
  260. data/vendor/local/include/glib-2.0/glib/gthreadpool.h +0 -114
  261. data/vendor/local/include/glib-2.0/glib/gtimer.h +0 -65
  262. data/vendor/local/include/glib-2.0/glib/gtimezone.h +0 -44
  263. data/vendor/local/include/glib-2.0/glib/gtree.h +0 -91
  264. data/vendor/local/include/glib-2.0/glib/gtypes.h +0 -451
  265. data/vendor/local/include/glib-2.0/glib/gunicode.h +0 -421
  266. data/vendor/local/include/glib-2.0/glib/gurifuncs.h +0 -81
  267. data/vendor/local/include/glib-2.0/glib/gutils.h +0 -490
  268. data/vendor/local/include/glib-2.0/glib/gvariant.h +0 -248
  269. data/vendor/local/include/glib-2.0/glib/gvarianttype.h +0 -334
  270. data/vendor/local/include/glib-2.0/glib/gwin32.h +0 -114
  271. data/vendor/local/include/glib-2.0/gmodule.h +0 -101
  272. data/vendor/local/include/glib-2.0/gobject/gbinding.h +0 -136
  273. data/vendor/local/include/glib-2.0/gobject/gboxed.h +0 -248
  274. data/vendor/local/include/glib-2.0/gobject/gclosure.h +0 -251
  275. data/vendor/local/include/glib-2.0/gobject/genums.h +0 -261
  276. data/vendor/local/include/glib-2.0/gobject/gmarshal.h +0 -186
  277. data/vendor/local/include/glib-2.0/gobject/gobject.h +0 -567
  278. data/vendor/local/include/glib-2.0/gobject/gobjectnotifyqueue.c +0 -193
  279. data/vendor/local/include/glib-2.0/gobject/gparam.h +0 -415
  280. data/vendor/local/include/glib-2.0/gobject/gparamspecs.h +0 -1137
  281. data/vendor/local/include/glib-2.0/gobject/gsignal.h +0 -509
  282. data/vendor/local/include/glib-2.0/gobject/gsourceclosure.h +0 -51
  283. data/vendor/local/include/glib-2.0/gobject/gtype.h +0 -1736
  284. data/vendor/local/include/glib-2.0/gobject/gtypemodule.h +0 -263
  285. data/vendor/local/include/glib-2.0/gobject/gtypeplugin.h +0 -134
  286. data/vendor/local/include/glib-2.0/gobject/gvalue.h +0 -159
  287. data/vendor/local/include/glib-2.0/gobject/gvaluearray.h +0 -77
  288. data/vendor/local/include/glib-2.0/gobject/gvaluecollector.h +0 -227
  289. data/vendor/local/include/glib-2.0/gobject/gvaluetypes.h +0 -260
  290. data/vendor/local/include/libintl.h +0 -464
  291. data/vendor/local/include/libpng14/png.h +0 -2701
  292. data/vendor/local/include/libpng14/pngconf.h +0 -1525
  293. data/vendor/local/include/png.h +0 -2701
  294. data/vendor/local/include/pngconf.h +0 -1525
  295. data/vendor/local/include/zconf.h +0 -461
  296. data/vendor/local/include/zlib.h +0 -1589
  297. data/vendor/local/lib/GNU.Gettext.dll +0 -0
  298. data/vendor/local/lib/cairo.def +0 -322
  299. data/vendor/local/lib/cairo.lib +0 -0
  300. data/vendor/local/lib/expat.lib +0 -0
  301. data/vendor/local/lib/fontconfig.def +0 -195
  302. data/vendor/local/lib/fontconfig.lib +0 -0
  303. data/vendor/local/lib/freetype.def +0 -186
  304. data/vendor/local/lib/freetype.lib +0 -0
  305. data/vendor/local/lib/gio-2.0.def +0 -1143
  306. data/vendor/local/lib/gio-2.0.lib +0 -0
  307. data/vendor/local/lib/glib-2.0.def +0 -1452
  308. data/vendor/local/lib/glib-2.0.lib +0 -0
  309. data/vendor/local/lib/glib-2.0/include/glibconfig.h +0 -284
  310. data/vendor/local/lib/gmodule-2.0.def +0 -11
  311. data/vendor/local/lib/gmodule-2.0.lib +0 -0
  312. data/vendor/local/lib/gobject-2.0.def +0 -370
  313. data/vendor/local/lib/gobject-2.0.lib +0 -0
  314. data/vendor/local/lib/gthread-2.0.def +0 -3
  315. data/vendor/local/lib/gthread-2.0.lib +0 -0
  316. data/vendor/local/lib/intl.lib +0 -0
  317. data/vendor/local/lib/libasprintf.dll.a +0 -0
  318. data/vendor/local/lib/libcairo-gobject.dll.a +0 -0
  319. data/vendor/local/lib/libcairo-script-interpreter.dll.a +0 -0
  320. data/vendor/local/lib/libcairo.dll.a +0 -0
  321. data/vendor/local/lib/libexpat.def +0 -73
  322. data/vendor/local/lib/libexpat.dll.a +0 -0
  323. data/vendor/local/lib/libfontconfig.dll.a +0 -0
  324. data/vendor/local/lib/libfreetype.dll.a +0 -0
  325. data/vendor/local/lib/libgio-2.0.dll.a +0 -0
  326. data/vendor/local/lib/libglib-2.0.dll.a +0 -0
  327. data/vendor/local/lib/libgmodule-2.0.dll.a +0 -0
  328. data/vendor/local/lib/libgobject-2.0.dll.a +0 -0
  329. data/vendor/local/lib/libgthread-2.0.dll.a +0 -0
  330. data/vendor/local/lib/libintl.def +0 -31
  331. data/vendor/local/lib/libintl.dll.a +0 -0
  332. data/vendor/local/lib/libpng.def +0 -192
  333. data/vendor/local/lib/libpng.lib +0 -0
  334. data/vendor/local/lib/libpng14.dll.a +0 -0
  335. data/vendor/local/lib/libz.dll.a +0 -0
  336. data/vendor/local/lib/pkgconfig/cairo-fc.pc +0 -12
  337. data/vendor/local/lib/pkgconfig/cairo-ft.pc +0 -12
  338. data/vendor/local/lib/pkgconfig/cairo-gobject.pc +0 -12
  339. data/vendor/local/lib/pkgconfig/cairo-pdf.pc +0 -12
  340. data/vendor/local/lib/pkgconfig/cairo-png.pc +0 -12
  341. data/vendor/local/lib/pkgconfig/cairo-ps.pc +0 -12
  342. data/vendor/local/lib/pkgconfig/cairo-svg.pc +0 -12
  343. data/vendor/local/lib/pkgconfig/cairo-win32-font.pc +0 -12
  344. data/vendor/local/lib/pkgconfig/cairo-win32.pc +0 -12
  345. data/vendor/local/lib/pkgconfig/cairo.pc +0 -13
  346. data/vendor/local/lib/pkgconfig/fontconfig.pc +0 -11
  347. data/vendor/local/lib/pkgconfig/freetype2.pc +0 -12
  348. data/vendor/local/lib/pkgconfig/gio-2.0.pc +0 -15
  349. data/vendor/local/lib/pkgconfig/gio-windows-2.0.pc +0 -11
  350. data/vendor/local/lib/pkgconfig/glib-2.0.pc +0 -15
  351. data/vendor/local/lib/pkgconfig/gmodule-2.0.pc +0 -14
  352. data/vendor/local/lib/pkgconfig/gmodule-no-export-2.0.pc +0 -14
  353. data/vendor/local/lib/pkgconfig/gobject-2.0.pc +0 -11
  354. data/vendor/local/lib/pkgconfig/gthread-2.0.pc +0 -11
  355. data/vendor/local/lib/pkgconfig/libpng.pc +0 -11
  356. data/vendor/local/lib/pkgconfig/libpng14.pc +0 -11
  357. data/vendor/local/lib/zdll.lib +0 -0
  358. data/vendor/local/lib/zlib.def +0 -67
  359. data/vendor/local/man/man1/xmlwf.1 +0 -251
  360. data/vendor/local/manifest/cairo-dev_1.10.0-2_win32.mft +0 -85
  361. data/vendor/local/manifest/cairo_1.10.0-2_win32.mft +0 -7
  362. data/vendor/local/manifest/expat-dev_2.0.1-1_win32.mft +0 -10
  363. data/vendor/local/manifest/expat_2.0.1-1_win32.mft +0 -2
  364. data/vendor/local/manifest/fontconfig-dev_2.8.0-2_win32.mft +0 -387
  365. data/vendor/local/manifest/fontconfig_2.8.0-2_win32.mft +0 -3
  366. data/vendor/local/manifest/freetype-dev_2.4.2-1_win32.mft +0 -56
  367. data/vendor/local/manifest/freetype_2.4.2-1_win32.mft +0 -2
  368. data/vendor/local/manifest/gettext-runtime-dev_0.18.1.1-2_win32.mft +0 -81
  369. data/vendor/local/manifest/gettext-runtime_0.18.1.1-2_win32.mft +0 -3
  370. data/vendor/local/manifest/glib-dev_2.26.0-2_win32.mft +0 -570
  371. data/vendor/local/manifest/glib_2.26.0-2_win32.mft +0 -102
  372. data/vendor/local/manifest/libpng-dev_1.4.3-1_win32.mft +0 -15
  373. data/vendor/local/manifest/libpng_1.4.3-1_win32.mft +0 -2
  374. data/vendor/local/manifest/zlib-dev_1.2.5-2_win32.mft +0 -8
  375. data/vendor/local/manifest/zlib_1.2.5-2_win32.mft +0 -2
  376. data/vendor/local/share/aclocal/freetype2.m4 +0 -194
  377. data/vendor/local/share/aclocal/glib-2.0.m4 +0 -211
  378. data/vendor/local/share/aclocal/glib-gettext.m4 +0 -432
  379. data/vendor/local/share/doc/cairo_1.10.0-2_win32/COPYING +0 -33
  380. data/vendor/local/share/doc/cairo_1.10.0-2_win32/COPYING-LGPL-2.1 +0 -510
  381. data/vendor/local/share/doc/cairo_1.10.0-2_win32/COPYING-MPL-1.1 +0 -470
  382. data/vendor/local/share/doc/fontconfig/fontconfig-devel.pdf +4 -42484
  383. data/vendor/local/share/doc/fontconfig/fontconfig-devel.txt +0 -5046
  384. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomiccreate.html +0 -224
  385. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicdeletenew.html +0 -216
  386. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicdestroy.html +0 -210
  387. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomiclock.html +0 -223
  388. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicnewfile.html +0 -222
  389. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicorigfile.html +0 -221
  390. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicreplaceorig.html +0 -223
  391. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicunlock.html +0 -216
  392. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblanksadd.html +0 -222
  393. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblankscreate.html +0 -216
  394. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblanksdestroy.html +0 -216
  395. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblanksismember.html +0 -211
  396. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachecopyset.html +0 -228
  397. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachedir.html +0 -221
  398. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachenumfont.html +0 -211
  399. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachenumsubdir.html +0 -221
  400. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachesubdir.html +0 -244
  401. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetaddchar.html +0 -226
  402. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcopy.html +0 -227
  403. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcount.html +0 -221
  404. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcoverage.html +0 -249
  405. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcreate.html +0 -220
  406. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetdestroy.html +0 -226
  407. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetequal.html +0 -232
  408. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetfirstpage.html +0 -238
  409. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsethaschar.html +0 -231
  410. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetintersect.html +0 -232
  411. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetintersectcount.html +0 -231
  412. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetissubset.html +0 -231
  413. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetmerge.html +0 -261
  414. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetnew.html +0 -208
  415. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetnextpage.html +0 -243
  416. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetsubtract.html +0 -231
  417. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetsubtractcount.html +0 -231
  418. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetunion.html +0 -231
  419. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigappfontadddir.html +0 -229
  420. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigappfontaddfile.html +0 -228
  421. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigappfontclear.html +0 -222
  422. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigbuildfonts.html +0 -224
  423. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigcreate.html +0 -216
  424. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigdestroy.html +0 -219
  425. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigenablehome.html +0 -230
  426. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigfilename.html +0 -237
  427. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetblanks.html +0 -225
  428. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetcache.html +0 -217
  429. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetcachedirs.html +0 -227
  430. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetconfigdirs.html +0 -228
  431. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetconfigfiles.html +0 -227
  432. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetcurrent.html +0 -216
  433. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetfontdirs.html +0 -229
  434. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetfonts.html +0 -234
  435. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetrescaninterval.html +0 -230
  436. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfighome.html +0 -221
  437. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigparseandload.html +0 -220
  438. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigreference.html +0 -231
  439. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsetcurrent.html +0 -222
  440. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsetrescaninterval.html +0 -229
  441. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsubstitute.html +0 -233
  442. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsubstitutewithpat.html +0 -251
  443. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiguptodate.html +0 -228
  444. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdefaultsubstitute.html +0 -234
  445. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheload.html +0 -239
  446. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheloadfile.html +0 -233
  447. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheread.html +0 -239
  448. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheunlink.html +0 -239
  449. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheunload.html +0 -211
  450. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircachevalid.html +0 -222
  451. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdirsave.html +0 -245
  452. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdirscan.html +0 -266
  453. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfileisdir.html +0 -222
  454. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfilescan.html +0 -276
  455. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfini.html +0 -219
  456. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontlist.html +0 -244
  457. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontmatch.html +0 -262
  458. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontrenderprepare.html +0 -259
  459. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetadd.html +0 -223
  460. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetcreate.html +0 -216
  461. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetdestroy.html +0 -217
  462. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetlist.html +0 -261
  463. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetmatch.html +0 -273
  464. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetprint.html +0 -224
  465. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetsort.html +0 -303
  466. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetsortdestroy.html +0 -222
  467. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsort.html +0 -289
  468. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypecharindex.html +0 -226
  469. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypecharset.html +0 -225
  470. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypecharsetandspacing.html +0 -241
  471. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypequery.html +0 -233
  472. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypequeryface.html +0 -222
  473. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcgetlangs.html +0 -216
  474. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcgetversion.html +0 -216
  475. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinit.html +0 -219
  476. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitbringuptodate.html +0 -208
  477. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitloadconfig.html +0 -217
  478. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitloadconfigandfonts.html +0 -217
  479. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitreinitialize.html +0 -219
  480. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcislower.html +0 -222
  481. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcisupper.html +0 -222
  482. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclanggetcharset.html +0 -205
  483. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetadd.html +0 -239
  484. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcompare.html +0 -239
  485. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcontains.html +0 -259
  486. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcopy.html +0 -225
  487. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcreate.html +0 -219
  488. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetdestroy.html +0 -220
  489. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetequal.html +0 -232
  490. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetgetlangs.html +0 -221
  491. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsethash.html +0 -233
  492. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsethaslang.html +0 -255
  493. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixcopy.html +0 -225
  494. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixequal.html +0 -236
  495. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixinit.html +0 -225
  496. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixmultiply.html +0 -246
  497. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixrotate.html +0 -261
  498. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixscale.html +0 -261
  499. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixshear.html +0 -250
  500. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameconstant.html +0 -221
  501. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnamegetconstant.html +0 -221
  502. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnamegetobjecttype.html +0 -210
  503. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameparse.html +0 -221
  504. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameregisterconstants.html +0 -228
  505. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameregisterobjecttypes.html +0 -228
  506. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameunparse.html +0 -218
  507. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameunregisterconstants.html +0 -228
  508. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameunregisterobjecttypes.html +0 -226
  509. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetadd.html +0 -222
  510. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetbuild.html +0 -262
  511. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetcreate.html +0 -216
  512. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetdestroy.html +0 -216
  513. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternadd-type.html +0 -404
  514. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternadd.html +0 -240
  515. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternaddweak.html +0 -242
  516. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternbuild.html +0 -313
  517. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatterncreate.html +0 -216
  518. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatterndel.html +0 -222
  519. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatterndestroy.html +0 -217
  520. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternduplicate.html +0 -223
  521. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternequal.html +0 -231
  522. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternequalsubset.html +0 -242
  523. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternfilter.html +0 -244
  524. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternformat.html +0 -602
  525. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternget-type.html +0 -435
  526. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternget.html +0 -249
  527. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternhash.html +0 -217
  528. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternprint.html +0 -218
  529. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternreference.html +0 -222
  530. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternremove.html +0 -227
  531. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrbasename.html +0 -212
  532. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcmp.html +0 -232
  533. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcmpignorecase.html +0 -233
  534. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcopy.html +0 -226
  535. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcopyfilename.html +0 -234
  536. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrdirname.html +0 -223
  537. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrdowncase.html +0 -222
  538. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrfree.html +0 -217
  539. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrlistcreate.html +0 -221
  540. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrlistdone.html +0 -210
  541. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrlistnext.html +0 -221
  542. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrplus.html +0 -233
  543. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetadd.html +0 -231
  544. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetaddfilename.html +0 -233
  545. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetcreate.html +0 -216
  546. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetdel.html +0 -237
  547. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetdestroy.html +0 -221
  548. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetequal.html +0 -233
  549. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetmember.html +0 -232
  550. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrstr.html +0 -244
  551. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrstrignorecase.html +0 -244
  552. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fctolower.html +0 -222
  553. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcucs4toutf8.html +0 -233
  554. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf16len.html +0 -278
  555. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf16toucs4.html +0 -265
  556. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf8len.html +0 -261
  557. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf8toucs4.html +0 -249
  558. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvaluedestroy.html +0 -222
  559. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvalueequal.html +0 -212
  560. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvalueprint.html +0 -223
  561. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvaluesave.html +0 -227
  562. data/vendor/local/share/doc/fontconfig/fontconfig-devel/ln12.html +0 -128
  563. data/vendor/local/share/doc/fontconfig/fontconfig-devel/t1.html +0 -133
  564. data/vendor/local/share/doc/fontconfig/fontconfig-devel/x102.html +0 -1463
  565. data/vendor/local/share/doc/fontconfig/fontconfig-devel/x19.html +0 -264
  566. data/vendor/local/share/doc/fontconfig/fontconfig-devel/x31.html +0 -590
  567. data/vendor/local/share/doc/fontconfig/fontconfig-user.html +0 -1352
  568. data/vendor/local/share/doc/fontconfig/fontconfig-user.pdf +0 -0
  569. data/vendor/local/share/doc/fontconfig/fontconfig-user.txt +0 -644
  570. data/vendor/local/share/doc/gettext/bind_textdomain_codeset.3.html +0 -165
  571. data/vendor/local/share/doc/gettext/bindtextdomain.3.html +0 -160
  572. data/vendor/local/share/doc/gettext/csharpdoc/GNU_Gettext.html +0 -8
  573. data/vendor/local/share/doc/gettext/csharpdoc/GNU_Gettext_GettextResourceManager.html +0 -305
  574. data/vendor/local/share/doc/gettext/csharpdoc/GNU_Gettext_GettextResourceSet.html +0 -356
  575. data/vendor/local/share/doc/gettext/csharpdoc/begin.html +0 -11
  576. data/vendor/local/share/doc/gettext/csharpdoc/index.html +0 -10
  577. data/vendor/local/share/doc/gettext/csharpdoc/namespaces.html +0 -6
  578. data/vendor/local/share/doc/gettext/envsubst.1.html +0 -213
  579. data/vendor/local/share/doc/gettext/gettext.1.html +0 -266
  580. data/vendor/local/share/doc/gettext/gettext.3.html +0 -186
  581. data/vendor/local/share/doc/gettext/ngettext.1.html +0 -280
  582. data/vendor/local/share/doc/gettext/ngettext.3.html +0 -143
  583. data/vendor/local/share/doc/gettext/textdomain.3.html +0 -150
  584. data/vendor/local/share/doc/glib-2.26.0/COPYING +0 -482
  585. data/vendor/local/share/doc/glib-dev-2.26.0/COPYING +0 -482
  586. data/vendor/local/share/doc/libasprintf/autosprintf_all.html +0 -174
  587. data/vendor/local/share/glib-2.0/gdb/glib.py +0 -249
  588. data/vendor/local/share/glib-2.0/gdb/gobject.py +0 -305
  589. data/vendor/local/share/glib-2.0/gettext/mkinstalldirs +0 -111
  590. data/vendor/local/share/glib-2.0/gettext/po/Makefile.in.in +0 -279
  591. data/vendor/local/share/glib-2.0/schemas/gschema.dtd +0 -60
  592. data/vendor/local/share/gtk-doc/html/cairo/bindings-errors.html +0 -122
  593. data/vendor/local/share/gtk-doc/html/cairo/bindings-fonts.html +0 -53
  594. data/vendor/local/share/gtk-doc/html/cairo/bindings-memory.html +0 -123
  595. data/vendor/local/share/gtk-doc/html/cairo/bindings-overloading.html +0 -121
  596. data/vendor/local/share/gtk-doc/html/cairo/bindings-path.html +0 -117
  597. data/vendor/local/share/gtk-doc/html/cairo/bindings-patterns.html +0 -62
  598. data/vendor/local/share/gtk-doc/html/cairo/bindings-return-values.html +0 -120
  599. data/vendor/local/share/gtk-doc/html/cairo/bindings-streams.html +0 -92
  600. data/vendor/local/share/gtk-doc/html/cairo/bindings-surfaces.html +0 -93
  601. data/vendor/local/share/gtk-doc/html/cairo/cairo-Error-handling.html +0 -373
  602. data/vendor/local/share/gtk-doc/html/cairo/cairo-FreeType-Fonts.html +0 -330
  603. data/vendor/local/share/gtk-doc/html/cairo/cairo-Image-Surfaces.html +0 -478
  604. data/vendor/local/share/gtk-doc/html/cairo/cairo-PDF-Surfaces.html +0 -344
  605. data/vendor/local/share/gtk-doc/html/cairo/cairo-PNG-Support.html +0 -320
  606. data/vendor/local/share/gtk-doc/html/cairo/cairo-Paths.html +0 -1291
  607. data/vendor/local/share/gtk-doc/html/cairo/cairo-PostScript-Surfaces.html +0 -622
  608. data/vendor/local/share/gtk-doc/html/cairo/cairo-Quartz-(CGFont)-Fonts.html +0 -134
  609. data/vendor/local/share/gtk-doc/html/cairo/cairo-Quartz-Surfaces.html +0 -210
  610. data/vendor/local/share/gtk-doc/html/cairo/cairo-Regions.html +0 -834
  611. data/vendor/local/share/gtk-doc/html/cairo/cairo-SVG-Surfaces.html +0 -318
  612. data/vendor/local/share/gtk-doc/html/cairo/cairo-Transformations.html +0 -410
  613. data/vendor/local/share/gtk-doc/html/cairo/cairo-Types.html +0 -169
  614. data/vendor/local/share/gtk-doc/html/cairo/cairo-User-Fonts.html +0 -715
  615. data/vendor/local/share/gtk-doc/html/cairo/cairo-Version-Information.html +0 -410
  616. data/vendor/local/share/gtk-doc/html/cairo/cairo-Win32-Fonts.html +0 -335
  617. data/vendor/local/share/gtk-doc/html/cairo/cairo-Win32-Surfaces.html +0 -291
  618. data/vendor/local/share/gtk-doc/html/cairo/cairo-XLib-Surfaces.html +0 -470
  619. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-device-t.html +0 -595
  620. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-font-face-t.html +0 -384
  621. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-font-options-t.html +0 -644
  622. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-matrix-t.html +0 -574
  623. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-pattern-t.html +0 -1457
  624. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-scaled-font-t.html +0 -1076
  625. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-surface-t.html +0 -1396
  626. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-t.html +0 -2743
  627. data/vendor/local/share/gtk-doc/html/cairo/cairo-drawing.html +0 -50
  628. data/vendor/local/share/gtk-doc/html/cairo/cairo-fonts.html +0 -53
  629. data/vendor/local/share/gtk-doc/html/cairo/cairo-support.html +0 -44
  630. data/vendor/local/share/gtk-doc/html/cairo/cairo-surfaces.html +0 -62
  631. data/vendor/local/share/gtk-doc/html/cairo/cairo-text.html +0 -1175
  632. data/vendor/local/share/gtk-doc/html/cairo/cairo.devhelp +0 -473
  633. data/vendor/local/share/gtk-doc/html/cairo/cairo.devhelp2 +0 -641
  634. data/vendor/local/share/gtk-doc/html/cairo/home.png +0 -0
  635. data/vendor/local/share/gtk-doc/html/cairo/index-1.10.html +0 -147
  636. data/vendor/local/share/gtk-doc/html/cairo/index-1.2.html +0 -164
  637. data/vendor/local/share/gtk-doc/html/cairo/index-1.4.html +0 -134
  638. data/vendor/local/share/gtk-doc/html/cairo/index-1.6.html +0 -82
  639. data/vendor/local/share/gtk-doc/html/cairo/index-1.8.html +0 -108
  640. data/vendor/local/share/gtk-doc/html/cairo/index-all.html +0 -956
  641. data/vendor/local/share/gtk-doc/html/cairo/index.html +0 -141
  642. data/vendor/local/share/gtk-doc/html/cairo/index.sgml +0 -708
  643. data/vendor/local/share/gtk-doc/html/cairo/language-bindings.html +0 -73
  644. data/vendor/local/share/gtk-doc/html/cairo/left.png +0 -0
  645. data/vendor/local/share/gtk-doc/html/cairo/right.png +0 -0
  646. data/vendor/local/share/gtk-doc/html/cairo/style.css +0 -265
  647. data/vendor/local/share/gtk-doc/html/cairo/up.png +0 -0
  648. data/vendor/local/share/gtk-doc/html/gio/GAppInfo.html +0 -1403
  649. data/vendor/local/share/gtk-doc/html/gio/GAsyncInitable.html +0 -733
  650. data/vendor/local/share/gtk-doc/html/gio/GAsyncResult.html +0 -343
  651. data/vendor/local/share/gtk-doc/html/gio/GBufferedInputStream.html +0 -563
  652. data/vendor/local/share/gtk-doc/html/gio/GBufferedOutputStream.html +0 -291
  653. data/vendor/local/share/gtk-doc/html/gio/GCancellable.html +0 -620
  654. data/vendor/local/share/gtk-doc/html/gio/GCharsetConverter.html +0 -245
  655. data/vendor/local/share/gtk-doc/html/gio/GConverter.html +0 -423
  656. data/vendor/local/share/gtk-doc/html/gio/GCredentials.html +0 -398
  657. data/vendor/local/share/gtk-doc/html/gio/GDBusAuthObserver.html +0 -254
  658. data/vendor/local/share/gtk-doc/html/gio/GDBusConnection.html +0 -6211
  659. data/vendor/local/share/gtk-doc/html/gio/GDBusMessage.html +0 -1833
  660. data/vendor/local/share/gtk-doc/html/gio/GDBusMethodInvocation.html +0 -618
  661. data/vendor/local/share/gtk-doc/html/gio/GDBusProxy.html +0 -2050
  662. data/vendor/local/share/gtk-doc/html/gio/GDBusServer.html +0 -1124
  663. data/vendor/local/share/gtk-doc/html/gio/GDataInputStream.html +0 -1215
  664. data/vendor/local/share/gtk-doc/html/gio/GDataOutputStream.html +0 -540
  665. data/vendor/local/share/gtk-doc/html/gio/GDrive.html +0 -1416
  666. data/vendor/local/share/gtk-doc/html/gio/GEmblem.html +0 -272
  667. data/vendor/local/share/gtk-doc/html/gio/GEmblemedIcon.html +0 -206
  668. data/vendor/local/share/gtk-doc/html/gio/GFile.html +0 -7462
  669. data/vendor/local/share/gtk-doc/html/gio/GFileDescriptorBased.html +0 -120
  670. data/vendor/local/share/gtk-doc/html/gio/GFileEnumerator.html +0 -516
  671. data/vendor/local/share/gtk-doc/html/gio/GFileIOStream.html +0 -312
  672. data/vendor/local/share/gtk-doc/html/gio/GFileIcon.html +0 -155
  673. data/vendor/local/share/gtk-doc/html/gio/GFileInfo.html +0 -3144
  674. data/vendor/local/share/gtk-doc/html/gio/GFileInputStream.html +0 -262
  675. data/vendor/local/share/gtk-doc/html/gio/GFileMonitor.html +0 -353
  676. data/vendor/local/share/gtk-doc/html/gio/GFileOutputStream.html +0 -301
  677. data/vendor/local/share/gtk-doc/html/gio/GFilenameCompleter.html +0 -217
  678. data/vendor/local/share/gtk-doc/html/gio/GFilterInputStream.html +0 -188
  679. data/vendor/local/share/gtk-doc/html/gio/GFilterOutputStream.html +0 -189
  680. data/vendor/local/share/gtk-doc/html/gio/GIOModule.html +0 -261
  681. data/vendor/local/share/gtk-doc/html/gio/GIOStream.html +0 -479
  682. data/vendor/local/share/gtk-doc/html/gio/GIcon.html +0 -331
  683. data/vendor/local/share/gtk-doc/html/gio/GInetAddress.html +0 -717
  684. data/vendor/local/share/gtk-doc/html/gio/GInetSocketAddress.html +0 -196
  685. data/vendor/local/share/gtk-doc/html/gio/GInitable.html +0 -388
  686. data/vendor/local/share/gtk-doc/html/gio/GInputStream.html +0 -808
  687. data/vendor/local/share/gtk-doc/html/gio/GLoadableIcon.html +0 -301
  688. data/vendor/local/share/gtk-doc/html/gio/GMemoryInputStream.html +0 -185
  689. data/vendor/local/share/gtk-doc/html/gio/GMemoryOutputStream.html +0 -393
  690. data/vendor/local/share/gtk-doc/html/gio/GMount.html +0 -1465
  691. data/vendor/local/share/gtk-doc/html/gio/GMountOperation.html +0 -848
  692. data/vendor/local/share/gtk-doc/html/gio/GNetworkAddress.html +0 -343
  693. data/vendor/local/share/gtk-doc/html/gio/GNetworkService.html +0 -311
  694. data/vendor/local/share/gtk-doc/html/gio/GOutputStream.html +0 -1012
  695. data/vendor/local/share/gtk-doc/html/gio/GPermission.html +0 -560
  696. data/vendor/local/share/gtk-doc/html/gio/GProxy.html +0 -312
  697. data/vendor/local/share/gtk-doc/html/gio/GProxyAddress.html +0 -348
  698. data/vendor/local/share/gtk-doc/html/gio/GProxyResolver.html +0 -301
  699. data/vendor/local/share/gtk-doc/html/gio/GResolver.html +0 -787
  700. data/vendor/local/share/gtk-doc/html/gio/GSeekable.html +0 -350
  701. data/vendor/local/share/gtk-doc/html/gio/GSettings.html +0 -2424
  702. data/vendor/local/share/gtk-doc/html/gio/GSettingsBackend.html +0 -609
  703. data/vendor/local/share/gtk-doc/html/gio/GSimpleAsyncResult.html +0 -1193
  704. data/vendor/local/share/gtk-doc/html/gio/GSimplePermission.html +0 -107
  705. data/vendor/local/share/gtk-doc/html/gio/GSocket.html +0 -2438
  706. data/vendor/local/share/gtk-doc/html/gio/GSocketAddress.html +0 -297
  707. data/vendor/local/share/gtk-doc/html/gio/GSocketClient.html +0 -1292
  708. data/vendor/local/share/gtk-doc/html/gio/GSocketConnectable.html +0 -513
  709. data/vendor/local/share/gtk-doc/html/gio/GSocketConnection.html +0 -337
  710. data/vendor/local/share/gtk-doc/html/gio/GSocketControlMessage.html +0 -275
  711. data/vendor/local/share/gtk-doc/html/gio/GSocketListener.html +0 -745
  712. data/vendor/local/share/gtk-doc/html/gio/GSocketService.html +0 -258
  713. data/vendor/local/share/gtk-doc/html/gio/GTcpConnection.html +0 -165
  714. data/vendor/local/share/gtk-doc/html/gio/GThemedIcon.html +0 -377
  715. data/vendor/local/share/gtk-doc/html/gio/GThreadedSocketService.html +0 -197
  716. data/vendor/local/share/gtk-doc/html/gio/GUnixConnection.html +0 -298
  717. data/vendor/local/share/gtk-doc/html/gio/GUnixCredentialsMessage.html +0 -222
  718. data/vendor/local/share/gtk-doc/html/gio/GUnixFDList.html +0 -389
  719. data/vendor/local/share/gtk-doc/html/gio/GUnixFDMessage.html +0 -288
  720. data/vendor/local/share/gtk-doc/html/gio/GUnixInputStream.html +0 -237
  721. data/vendor/local/share/gtk-doc/html/gio/GUnixOutputStream.html +0 -237
  722. data/vendor/local/share/gtk-doc/html/gio/GUnixSocketAddress.html +0 -491
  723. data/vendor/local/share/gtk-doc/html/gio/GVfs.html +0 -274
  724. data/vendor/local/share/gtk-doc/html/gio/GVolume.html +0 -1028
  725. data/vendor/local/share/gtk-doc/html/gio/GVolumeMonitor.html +0 -705
  726. data/vendor/local/share/gtk-doc/html/gio/GZlibCompressor.html +0 -252
  727. data/vendor/local/share/gtk-doc/html/gio/GZlibDecompressor.html +0 -170
  728. data/vendor/local/share/gtk-doc/html/gio/annotation-glossary.html +0 -65
  729. data/vendor/local/share/gtk-doc/html/gio/api-index-2-18.html +0 -153
  730. data/vendor/local/share/gtk-doc/html/gio/api-index-2-20.html +0 -155
  731. data/vendor/local/share/gtk-doc/html/gio/api-index-2-22.html +0 -1084
  732. data/vendor/local/share/gtk-doc/html/gio/api-index-2-24.html +0 -223
  733. data/vendor/local/share/gtk-doc/html/gio/api-index-2-26.html +0 -1598
  734. data/vendor/local/share/gtk-doc/html/gio/api-index-deprecated.html +0 -112
  735. data/vendor/local/share/gtk-doc/html/gio/api-index-full.html +0 -6250
  736. data/vendor/local/share/gtk-doc/html/gio/async.html +0 -44
  737. data/vendor/local/share/gtk-doc/html/gio/ch01.html +0 -207
  738. data/vendor/local/share/gtk-doc/html/gio/ch02.html +0 -50
  739. data/vendor/local/share/gtk-doc/html/gio/ch03.html +0 -180
  740. data/vendor/local/share/gtk-doc/html/gio/ch24.html +0 -75
  741. data/vendor/local/share/gtk-doc/html/gio/ch25.html +0 -217
  742. data/vendor/local/share/gtk-doc/html/gio/ch25s02.html +0 -41
  743. data/vendor/local/share/gtk-doc/html/gio/ch25s03.html +0 -39
  744. data/vendor/local/share/gtk-doc/html/gio/ch26.html +0 -57
  745. data/vendor/local/share/gtk-doc/html/gio/ch26s02.html +0 -59
  746. data/vendor/local/share/gtk-doc/html/gio/ch26s03.html +0 -159
  747. data/vendor/local/share/gtk-doc/html/gio/ch26s04.html +0 -46
  748. data/vendor/local/share/gtk-doc/html/gio/ch26s05.html +0 -48
  749. data/vendor/local/share/gtk-doc/html/gio/ch26s06.html +0 -277
  750. data/vendor/local/share/gtk-doc/html/gio/ch26s07.html +0 -95
  751. data/vendor/local/share/gtk-doc/html/gio/ch27.html +0 -70
  752. data/vendor/local/share/gtk-doc/html/gio/ch27s02.html +0 -130
  753. data/vendor/local/share/gtk-doc/html/gio/ch27s03.html +0 -202
  754. data/vendor/local/share/gtk-doc/html/gio/ch27s04.html +0 -96
  755. data/vendor/local/share/gtk-doc/html/gio/ch27s05.html +0 -823
  756. data/vendor/local/share/gtk-doc/html/gio/ch27s06.html +0 -828
  757. data/vendor/local/share/gtk-doc/html/gio/conversion.html +0 -44
  758. data/vendor/local/share/gtk-doc/html/gio/extending-gio.html +0 -109
  759. data/vendor/local/share/gtk-doc/html/gio/extending.html +0 -41
  760. data/vendor/local/share/gtk-doc/html/gio/failable_initialization.html +0 -38
  761. data/vendor/local/share/gtk-doc/html/gio/file_mon.html +0 -33
  762. data/vendor/local/share/gtk-doc/html/gio/file_ops.html +0 -50
  763. data/vendor/local/share/gtk-doc/html/gio/gdbus-convenience.html +0 -41
  764. data/vendor/local/share/gtk-doc/html/gio/gdbus-lowlevel.html +0 -59
  765. data/vendor/local/share/gtk-doc/html/gio/gdbus.html +0 -243
  766. data/vendor/local/share/gtk-doc/html/gio/gio-D-Bus-Addresses.html +0 -316
  767. data/vendor/local/share/gtk-doc/html/gio/gio-D-Bus-Introspection-Data.html +0 -1117
  768. data/vendor/local/share/gtk-doc/html/gio/gio-D-Bus-Utilities.html +0 -216
  769. data/vendor/local/share/gtk-doc/html/gio/gio-Desktop-file-based-GAppInfo.html +0 -339
  770. data/vendor/local/share/gtk-doc/html/gio/gio-Extension-Points.html +0 -473
  771. data/vendor/local/share/gtk-doc/html/gio/gio-GContentType.html +0 -391
  772. data/vendor/local/share/gtk-doc/html/gio/gio-GConverterInputstream.html +0 -159
  773. data/vendor/local/share/gtk-doc/html/gio/gio-GConverterOutputstream.html +0 -159
  774. data/vendor/local/share/gtk-doc/html/gio/gio-GDBusError.html +0 -908
  775. data/vendor/local/share/gtk-doc/html/gio/gio-GFileAttribute.html +0 -933
  776. data/vendor/local/share/gtk-doc/html/gio/gio-GIOError.html +0 -409
  777. data/vendor/local/share/gtk-doc/html/gio/gio-GIOScheduler.html +0 -297
  778. data/vendor/local/share/gtk-doc/html/gio/gio-GSrvTarget.html +0 -313
  779. data/vendor/local/share/gtk-doc/html/gio/gio-Owning-Bus-Names.html +0 -736
  780. data/vendor/local/share/gtk-doc/html/gio/gio-Unix-Mounts.html +0 -909
  781. data/vendor/local/share/gtk-doc/html/gio/gio-Watching-Bus-Names.html +0 -666
  782. data/vendor/local/share/gtk-doc/html/gio/gio-hierarchy.html +0 -123
  783. data/vendor/local/share/gtk-doc/html/gio/gio-querymodules.html +0 -53
  784. data/vendor/local/share/gtk-doc/html/gio/gio.devhelp +0 -1736
  785. data/vendor/local/share/gtk-doc/html/gio/gio.devhelp2 +0 -2006
  786. data/vendor/local/share/gtk-doc/html/gio/glib-compile-schemas.html +0 -102
  787. data/vendor/local/share/gtk-doc/html/gio/gvfs-overview.png +0 -0
  788. data/vendor/local/share/gtk-doc/html/gio/highlevel-socket.html +0 -53
  789. data/vendor/local/share/gtk-doc/html/gio/home.png +0 -0
  790. data/vendor/local/share/gtk-doc/html/gio/icons.html +0 -50
  791. data/vendor/local/share/gtk-doc/html/gio/index.html +0 -435
  792. data/vendor/local/share/gtk-doc/html/gio/index.sgml +0 -2513
  793. data/vendor/local/share/gtk-doc/html/gio/left.png +0 -0
  794. data/vendor/local/share/gtk-doc/html/gio/migrating.html +0 -62
  795. data/vendor/local/share/gtk-doc/html/gio/networking.html +0 -69
  796. data/vendor/local/share/gtk-doc/html/gio/permissions.html +0 -39
  797. data/vendor/local/share/gtk-doc/html/gio/pt01.html +0 -39
  798. data/vendor/local/share/gtk-doc/html/gio/pt02.html +0 -390
  799. data/vendor/local/share/gtk-doc/html/gio/resolver.html +0 -50
  800. data/vendor/local/share/gtk-doc/html/gio/right.png +0 -0
  801. data/vendor/local/share/gtk-doc/html/gio/settings.html +0 -38
  802. data/vendor/local/share/gtk-doc/html/gio/streaming.html +0 -92
  803. data/vendor/local/share/gtk-doc/html/gio/style.css +0 -265
  804. data/vendor/local/share/gtk-doc/html/gio/tools.html +0 -44
  805. data/vendor/local/share/gtk-doc/html/gio/types.html +0 -41
  806. data/vendor/local/share/gtk-doc/html/gio/up.png +0 -0
  807. data/vendor/local/share/gtk-doc/html/gio/utils.html +0 -33
  808. data/vendor/local/share/gtk-doc/html/gio/volume_mon.html +0 -47
  809. data/vendor/local/share/gtk-doc/html/glib/annotation-glossary.html +0 -77
  810. data/vendor/local/share/gtk-doc/html/glib/api-index-2-10.html +0 -180
  811. data/vendor/local/share/gtk-doc/html/glib/api-index-2-12.html +0 -312
  812. data/vendor/local/share/gtk-doc/html/glib/api-index-2-14.html +0 -559
  813. data/vendor/local/share/gtk-doc/html/glib/api-index-2-16.html +0 -362
  814. data/vendor/local/share/gtk-doc/html/glib/api-index-2-18.html +0 -102
  815. data/vendor/local/share/gtk-doc/html/glib/api-index-2-2.html +0 -124
  816. data/vendor/local/share/gtk-doc/html/glib/api-index-2-20.html +0 -83
  817. data/vendor/local/share/gtk-doc/html/glib/api-index-2-22.html +0 -194
  818. data/vendor/local/share/gtk-doc/html/glib/api-index-2-24.html +0 -420
  819. data/vendor/local/share/gtk-doc/html/glib/api-index-2-26.html +0 -359
  820. data/vendor/local/share/gtk-doc/html/glib/api-index-2-4.html +0 -396
  821. data/vendor/local/share/gtk-doc/html/glib/api-index-2-6.html +0 -417
  822. data/vendor/local/share/gtk-doc/html/glib/api-index-2-8.html +0 -158
  823. data/vendor/local/share/gtk-doc/html/glib/api-index-deprecated.html +0 -419
  824. data/vendor/local/share/gtk-doc/html/glib/api-index-full.html +0 -8214
  825. data/vendor/local/share/gtk-doc/html/glib/file-name-encodings.png +0 -0
  826. data/vendor/local/share/gtk-doc/html/glib/glib-Arrays.html +0 -893
  827. data/vendor/local/share/gtk-doc/html/glib/glib-Asynchronous-Queues.html +0 -818
  828. data/vendor/local/share/gtk-doc/html/glib/glib-Atomic-Operations.html +0 -414
  829. data/vendor/local/share/gtk-doc/html/glib/glib-Automatic-String-Completion.html +0 -466
  830. data/vendor/local/share/gtk-doc/html/glib/glib-Balanced-Binary-Trees.html +0 -802
  831. data/vendor/local/share/gtk-doc/html/glib/glib-Base64-Encoding.html +0 -372
  832. data/vendor/local/share/gtk-doc/html/glib/glib-Basic-Types.html +0 -500
  833. data/vendor/local/share/gtk-doc/html/glib/glib-Bookmark-file-parser.html +0 -2056
  834. data/vendor/local/share/gtk-doc/html/glib/glib-Byte-Arrays.html +0 -560
  835. data/vendor/local/share/gtk-doc/html/glib/glib-Byte-Order-Macros.html +0 -1686
  836. data/vendor/local/share/gtk-doc/html/glib/glib-Caches.html +0 -398
  837. data/vendor/local/share/gtk-doc/html/glib/glib-Character-Set-Conversion.html +0 -1094
  838. data/vendor/local/share/gtk-doc/html/glib/glib-Commandline-option-parser.html +0 -1671
  839. data/vendor/local/share/gtk-doc/html/glib/glib-Data-Checksums.html +0 -460
  840. data/vendor/local/share/gtk-doc/html/glib/glib-Datasets.html +0 -528
  841. data/vendor/local/share/gtk-doc/html/glib/glib-Date-and-Time-Functions.html +0 -2045
  842. data/vendor/local/share/gtk-doc/html/glib/glib-Double-ended-Queues.html +0 -1278
  843. data/vendor/local/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html +0 -1406
  844. data/vendor/local/share/gtk-doc/html/glib/glib-Dynamic-Loading-of-Modules.html +0 -548
  845. data/vendor/local/share/gtk-doc/html/glib/glib-Error-Reporting.html +0 -1026
  846. data/vendor/local/share/gtk-doc/html/glib/glib-File-Utilities.html +0 -1852
  847. data/vendor/local/share/gtk-doc/html/glib/glib-GDateTime.html +0 -2201
  848. data/vendor/local/share/gtk-doc/html/glib/glib-GTimeZone.html +0 -239
  849. data/vendor/local/share/gtk-doc/html/glib/glib-GVariant.html +0 -4278
  850. data/vendor/local/share/gtk-doc/html/glib/glib-GVariantType.html +0 -1864
  851. data/vendor/local/share/gtk-doc/html/glib/glib-Glob-style-pattern-matching.html +0 -295
  852. data/vendor/local/share/gtk-doc/html/glib/glib-Hash-Tables.html +0 -1512
  853. data/vendor/local/share/gtk-doc/html/glib/glib-Hook-Functions.html +0 -1367
  854. data/vendor/local/share/gtk-doc/html/glib/glib-Hostname-Utilities.html +0 -229
  855. data/vendor/local/share/gtk-doc/html/glib/glib-I18N.html +0 -692
  856. data/vendor/local/share/gtk-doc/html/glib/glib-IO-Channels.html +0 -2196
  857. data/vendor/local/share/gtk-doc/html/glib/glib-Key-value-file-parser.html +0 -2740
  858. data/vendor/local/share/gtk-doc/html/glib/glib-Keyed-Data-Lists.html +0 -612
  859. data/vendor/local/share/gtk-doc/html/glib/glib-Lexical-Scanner.html +0 -1451
  860. data/vendor/local/share/gtk-doc/html/glib/glib-Limits-of-Basic-Types.html +0 -389
  861. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Allocation.html +0 -1033
  862. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Allocators.html +0 -141
  863. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Chunks.html +0 -706
  864. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Slices.html +0 -510
  865. data/vendor/local/share/gtk-doc/html/glib/glib-Message-Logging.html +0 -748
  866. data/vendor/local/share/gtk-doc/html/glib/glib-Miscellaneous-Macros.html +0 -1105
  867. data/vendor/local/share/gtk-doc/html/glib/glib-Miscellaneous-Utility-Functions.html +0 -1552
  868. data/vendor/local/share/gtk-doc/html/glib/glib-N-ary-Trees.html +0 -1468
  869. data/vendor/local/share/gtk-doc/html/glib/glib-Numerical-Definitions.html +0 -194
  870. data/vendor/local/share/gtk-doc/html/glib/glib-Perl-compatible-regular-expressions.html +0 -2745
  871. data/vendor/local/share/gtk-doc/html/glib/glib-Pointer-Arrays.html +0 -752
  872. data/vendor/local/share/gtk-doc/html/glib/glib-Quarks.html +0 -269
  873. data/vendor/local/share/gtk-doc/html/glib/glib-Random-Numbers.html +0 -578
  874. data/vendor/local/share/gtk-doc/html/glib/glib-Relations-and-Tuples.html +0 -532
  875. data/vendor/local/share/gtk-doc/html/glib/glib-Sequences.html +0 -1353
  876. data/vendor/local/share/gtk-doc/html/glib/glib-Shell-related-Utilities.html +0 -238
  877. data/vendor/local/share/gtk-doc/html/glib/glib-Simple-XML-Subset-Parser.html +0 -1282
  878. data/vendor/local/share/gtk-doc/html/glib/glib-Singly-Linked-Lists.html +0 -1213
  879. data/vendor/local/share/gtk-doc/html/glib/glib-Spawning-Processes.html +0 -924
  880. data/vendor/local/share/gtk-doc/html/glib/glib-Standard-Macros.html +0 -470
  881. data/vendor/local/share/gtk-doc/html/glib/glib-String-Chunks.html +0 -301
  882. data/vendor/local/share/gtk-doc/html/glib/glib-String-Utility-Functions.html +0 -2960
  883. data/vendor/local/share/gtk-doc/html/glib/glib-Strings.html +0 -1291
  884. data/vendor/local/share/gtk-doc/html/glib/glib-Testing.html +0 -1805
  885. data/vendor/local/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html +0 -3478
  886. data/vendor/local/share/gtk-doc/html/glib/glib-Thread-Pools.html +0 -606
  887. data/vendor/local/share/gtk-doc/html/glib/glib-Threads.html +0 -3411
  888. data/vendor/local/share/gtk-doc/html/glib/glib-Timers.html +0 -245
  889. data/vendor/local/share/gtk-doc/html/glib/glib-Trash-Stacks.html +0 -188
  890. data/vendor/local/share/gtk-doc/html/glib/glib-Type-Conversion-Macros.html +0 -263
  891. data/vendor/local/share/gtk-doc/html/glib/glib-URI-Functions.html +0 -400
  892. data/vendor/local/share/gtk-doc/html/glib/glib-Unicode-Manipulation.html +0 -3448
  893. data/vendor/local/share/gtk-doc/html/glib/glib-Version-Information.html +0 -253
  894. data/vendor/local/share/gtk-doc/html/glib/glib-Warnings-and-Assertions.html +0 -438
  895. data/vendor/local/share/gtk-doc/html/glib/glib-Windows-Compatibility-Functions.html +0 -476
  896. data/vendor/local/share/gtk-doc/html/glib/glib-building.html +0 -466
  897. data/vendor/local/share/gtk-doc/html/glib/glib-changes.html +0 -159
  898. data/vendor/local/share/gtk-doc/html/glib/glib-compiling.html +0 -118
  899. data/vendor/local/share/gtk-doc/html/glib/glib-core.html +0 -64
  900. data/vendor/local/share/gtk-doc/html/glib/glib-cross-compiling.html +0 -160
  901. data/vendor/local/share/gtk-doc/html/glib/glib-data-types.html +0 -120
  902. data/vendor/local/share/gtk-doc/html/glib/glib-fundamentals.html +0 -59
  903. data/vendor/local/share/gtk-doc/html/glib/glib-gettextize.html +0 -93
  904. data/vendor/local/share/gtk-doc/html/glib/glib-regex-syntax.html +0 -2217
  905. data/vendor/local/share/gtk-doc/html/glib/glib-resources.html +0 -121
  906. data/vendor/local/share/gtk-doc/html/glib/glib-running.html +0 -319
  907. data/vendor/local/share/gtk-doc/html/glib/glib-utilities.html +0 -118
  908. data/vendor/local/share/gtk-doc/html/glib/glib.devhelp +0 -2183
  909. data/vendor/local/share/gtk-doc/html/glib/glib.devhelp2 +0 -2671
  910. data/vendor/local/share/gtk-doc/html/glib/glib.html +0 -80
  911. data/vendor/local/share/gtk-doc/html/glib/gtester-report.html +0 -72
  912. data/vendor/local/share/gtk-doc/html/glib/gtester.html +0 -131
  913. data/vendor/local/share/gtk-doc/html/glib/gvariant-format-strings.html +0 -1288
  914. data/vendor/local/share/gtk-doc/html/glib/home.png +0 -0
  915. data/vendor/local/share/gtk-doc/html/glib/index.html +0 -344
  916. data/vendor/local/share/gtk-doc/html/glib/index.sgml +0 -2846
  917. data/vendor/local/share/gtk-doc/html/glib/left.png +0 -0
  918. data/vendor/local/share/gtk-doc/html/glib/mainloop-states.gif +0 -0
  919. data/vendor/local/share/gtk-doc/html/glib/right.png +0 -0
  920. data/vendor/local/share/gtk-doc/html/glib/style.css +0 -265
  921. data/vendor/local/share/gtk-doc/html/glib/tools.html +0 -41
  922. data/vendor/local/share/gtk-doc/html/glib/up.png +0 -0
  923. data/vendor/local/share/gtk-doc/html/gobject/GBinding.html +0 -803
  924. data/vendor/local/share/gtk-doc/html/gobject/GTypeModule.html +0 -710
  925. data/vendor/local/share/gtk-doc/html/gobject/GTypePlugin.html +0 -453
  926. data/vendor/local/share/gtk-doc/html/gobject/annotation-glossary.html +0 -47
  927. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-10.html +0 -85
  928. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-12.html +0 -55
  929. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-14.html +0 -51
  930. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-18.html +0 -46
  931. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-2.html +0 -38
  932. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-22.html +0 -46
  933. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-24.html +0 -73
  934. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-26.html +0 -201
  935. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-4.html +0 -178
  936. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-6.html +0 -42
  937. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-8.html +0 -42
  938. data/vendor/local/share/gtk-doc/html/gobject/api-index-deprecated.html +0 -50
  939. data/vendor/local/share/gtk-doc/html/gobject/api-index-full.html +0 -2721
  940. data/vendor/local/share/gtk-doc/html/gobject/ch01s02.html +0 -136
  941. data/vendor/local/share/gtk-doc/html/gobject/ch06s03.html +0 -113
  942. data/vendor/local/share/gtk-doc/html/gobject/chapter-gobject.html +0 -293
  943. data/vendor/local/share/gtk-doc/html/gobject/chapter-gtype.html +0 -263
  944. data/vendor/local/share/gtk-doc/html/gobject/chapter-intro.html +0 -92
  945. data/vendor/local/share/gtk-doc/html/gobject/chapter-signal.html +0 -214
  946. data/vendor/local/share/gtk-doc/html/gobject/glib-genmarshal.html +0 -361
  947. data/vendor/local/share/gtk-doc/html/gobject/glib-mkenums.html +0 -307
  948. data/vendor/local/share/gtk-doc/html/gobject/glue.png +0 -0
  949. data/vendor/local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html +0 -417
  950. data/vendor/local/share/gtk-doc/html/gobject/gobject-Closures.html +0 -2412
  951. data/vendor/local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html +0 -847
  952. data/vendor/local/share/gtk-doc/html/gobject/gobject-GParamSpec.html +0 -1433
  953. data/vendor/local/share/gtk-doc/html/gobject/gobject-Generic-values.html +0 -776
  954. data/vendor/local/share/gtk-doc/html/gobject/gobject-Signals.html +0 -2741
  955. data/vendor/local/share/gtk-doc/html/gobject/gobject-Standard-Parameter-and-Value-Types.html +0 -5555
  956. data/vendor/local/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html +0 -2875
  957. data/vendor/local/share/gtk-doc/html/gobject/gobject-Type-Information.html +0 -4460
  958. data/vendor/local/share/gtk-doc/html/gobject/gobject-Value-arrays.html +0 -416
  959. data/vendor/local/share/gtk-doc/html/gobject/gobject-Varargs-Value-Collection.html +0 -260
  960. data/vendor/local/share/gtk-doc/html/gobject/gobject-memory.html +0 -234
  961. data/vendor/local/share/gtk-doc/html/gobject/gobject-properties.html +0 -270
  962. data/vendor/local/share/gtk-doc/html/gobject/gobject-query.html +0 -117
  963. data/vendor/local/share/gtk-doc/html/gobject/gobject.devhelp +0 -762
  964. data/vendor/local/share/gtk-doc/html/gobject/gobject.devhelp2 +0 -801
  965. data/vendor/local/share/gtk-doc/html/gobject/gtype-conventions.html +0 -143
  966. data/vendor/local/share/gtk-doc/html/gobject/gtype-instantiable-classed.html +0 -287
  967. data/vendor/local/share/gtk-doc/html/gobject/gtype-non-instantiable-classed.html +0 -316
  968. data/vendor/local/share/gtk-doc/html/gobject/gtype-non-instantiable.html +0 -76
  969. data/vendor/local/share/gtk-doc/html/gobject/home.png +0 -0
  970. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-chainup.html +0 -100
  971. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-code.html +0 -86
  972. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-construction.html +0 -113
  973. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-destruction.html +0 -122
  974. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-methods.html +0 -257
  975. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject.html +0 -283
  976. data/vendor/local/share/gtk-doc/html/gobject/howto-interface-implement.html +0 -125
  977. data/vendor/local/share/gtk-doc/html/gobject/howto-interface-properties.html +0 -167
  978. data/vendor/local/share/gtk-doc/html/gobject/howto-interface.html +0 -160
  979. data/vendor/local/share/gtk-doc/html/gobject/howto-signals.html +0 -121
  980. data/vendor/local/share/gtk-doc/html/gobject/index.html +0 -192
  981. data/vendor/local/share/gtk-doc/html/gobject/index.sgml +0 -786
  982. data/vendor/local/share/gtk-doc/html/gobject/left.png +0 -0
  983. data/vendor/local/share/gtk-doc/html/gobject/pr01.html +0 -72
  984. data/vendor/local/share/gtk-doc/html/gobject/pt01.html +0 -80
  985. data/vendor/local/share/gtk-doc/html/gobject/pt02.html +0 -66
  986. data/vendor/local/share/gtk-doc/html/gobject/pt03.html +0 -55
  987. data/vendor/local/share/gtk-doc/html/gobject/right.png +0 -0
  988. data/vendor/local/share/gtk-doc/html/gobject/rn01.html +0 -85
  989. data/vendor/local/share/gtk-doc/html/gobject/rn02.html +0 -47
  990. data/vendor/local/share/gtk-doc/html/gobject/signal.html +0 -377
  991. data/vendor/local/share/gtk-doc/html/gobject/style.css +0 -265
  992. data/vendor/local/share/gtk-doc/html/gobject/tools-ginspector.html +0 -35
  993. data/vendor/local/share/gtk-doc/html/gobject/tools-gob.html +0 -40
  994. data/vendor/local/share/gtk-doc/html/gobject/tools-gtkdoc.html +0 -63
  995. data/vendor/local/share/gtk-doc/html/gobject/tools-refdb.html +0 -55
  996. data/vendor/local/share/gtk-doc/html/gobject/tools-vala.html +0 -43
  997. data/vendor/local/share/gtk-doc/html/gobject/up.png +0 -0
  998. data/vendor/local/share/locale/af/LC_MESSAGES/glib20.mo +0 -0
  999. data/vendor/local/share/locale/am/LC_MESSAGES/glib20.mo +0 -0
  1000. data/vendor/local/share/locale/ar/LC_MESSAGES/glib20.mo +0 -0
  1001. data/vendor/local/share/locale/as/LC_MESSAGES/glib20.mo +0 -0
  1002. data/vendor/local/share/locale/ast/LC_MESSAGES/glib20.mo +0 -0
  1003. data/vendor/local/share/locale/az/LC_MESSAGES/glib20.mo +0 -0
  1004. data/vendor/local/share/locale/be/LC_MESSAGES/gettext-runtime.mo +0 -0
  1005. data/vendor/local/share/locale/be/LC_MESSAGES/glib20.mo +0 -0
  1006. data/vendor/local/share/locale/be@latin/LC_MESSAGES/glib20.mo +0 -0
  1007. data/vendor/local/share/locale/bg/LC_MESSAGES/gettext-runtime.mo +0 -0
  1008. data/vendor/local/share/locale/bg/LC_MESSAGES/glib20.mo +0 -0
  1009. data/vendor/local/share/locale/bn/LC_MESSAGES/glib20.mo +0 -0
  1010. data/vendor/local/share/locale/bn_IN/LC_MESSAGES/glib20.mo +0 -0
  1011. data/vendor/local/share/locale/bs/LC_MESSAGES/glib20.mo +0 -0
  1012. data/vendor/local/share/locale/ca/LC_MESSAGES/gettext-runtime.mo +0 -0
  1013. data/vendor/local/share/locale/ca/LC_MESSAGES/glib20.mo +0 -0
  1014. data/vendor/local/share/locale/ca@valencia/LC_MESSAGES/glib20.mo +0 -0
  1015. data/vendor/local/share/locale/cs/LC_MESSAGES/gettext-runtime.mo +0 -0
  1016. data/vendor/local/share/locale/cs/LC_MESSAGES/glib20.mo +0 -0
  1017. data/vendor/local/share/locale/cy/LC_MESSAGES/glib20.mo +0 -0
  1018. data/vendor/local/share/locale/da/LC_MESSAGES/gettext-runtime.mo +0 -0
  1019. data/vendor/local/share/locale/da/LC_MESSAGES/glib20.mo +0 -0
  1020. data/vendor/local/share/locale/de/LC_MESSAGES/gettext-runtime.mo +0 -0
  1021. data/vendor/local/share/locale/de/LC_MESSAGES/glib20.mo +0 -0
  1022. data/vendor/local/share/locale/dz/LC_MESSAGES/glib20.mo +0 -0
  1023. data/vendor/local/share/locale/el/LC_MESSAGES/gettext-runtime.mo +0 -0
  1024. data/vendor/local/share/locale/el/LC_MESSAGES/glib20.mo +0 -0
  1025. data/vendor/local/share/locale/en@boldquot/LC_MESSAGES/gettext-runtime.mo +0 -0
  1026. data/vendor/local/share/locale/en@quot/LC_MESSAGES/gettext-runtime.mo +0 -0
  1027. data/vendor/local/share/locale/en@shaw/LC_MESSAGES/glib20.mo +0 -0
  1028. data/vendor/local/share/locale/en_CA/LC_MESSAGES/glib20.mo +0 -0
  1029. data/vendor/local/share/locale/en_GB/LC_MESSAGES/glib20.mo +0 -0
  1030. data/vendor/local/share/locale/eo/LC_MESSAGES/gettext-runtime.mo +0 -0
  1031. data/vendor/local/share/locale/eo/LC_MESSAGES/glib20.mo +0 -0
  1032. data/vendor/local/share/locale/es/LC_MESSAGES/gettext-runtime.mo +0 -0
  1033. data/vendor/local/share/locale/es/LC_MESSAGES/glib20.mo +0 -0
  1034. data/vendor/local/share/locale/et/LC_MESSAGES/gettext-runtime.mo +0 -0
  1035. data/vendor/local/share/locale/et/LC_MESSAGES/glib20.mo +0 -0
  1036. data/vendor/local/share/locale/eu/LC_MESSAGES/glib20.mo +0 -0
  1037. data/vendor/local/share/locale/fa/LC_MESSAGES/glib20.mo +0 -0
  1038. data/vendor/local/share/locale/fi/LC_MESSAGES/gettext-runtime.mo +0 -0
  1039. data/vendor/local/share/locale/fi/LC_MESSAGES/glib20.mo +0 -0
  1040. data/vendor/local/share/locale/fr/LC_MESSAGES/gettext-runtime.mo +0 -0
  1041. data/vendor/local/share/locale/fr/LC_MESSAGES/glib20.mo +0 -0
  1042. data/vendor/local/share/locale/ga/LC_MESSAGES/gettext-runtime.mo +0 -0
  1043. data/vendor/local/share/locale/ga/LC_MESSAGES/glib20.mo +0 -0
  1044. data/vendor/local/share/locale/gl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1045. data/vendor/local/share/locale/gl/LC_MESSAGES/glib20.mo +0 -0
  1046. data/vendor/local/share/locale/gu/LC_MESSAGES/glib20.mo +0 -0
  1047. data/vendor/local/share/locale/he/LC_MESSAGES/glib20.mo +0 -0
  1048. data/vendor/local/share/locale/hi/LC_MESSAGES/glib20.mo +0 -0
  1049. data/vendor/local/share/locale/hr/LC_MESSAGES/glib20.mo +0 -0
  1050. data/vendor/local/share/locale/hu/LC_MESSAGES/glib20.mo +0 -0
  1051. data/vendor/local/share/locale/hy/LC_MESSAGES/glib20.mo +0 -0
  1052. data/vendor/local/share/locale/id/LC_MESSAGES/gettext-runtime.mo +0 -0
  1053. data/vendor/local/share/locale/id/LC_MESSAGES/glib20.mo +0 -0
  1054. data/vendor/local/share/locale/is/LC_MESSAGES/glib20.mo +0 -0
  1055. data/vendor/local/share/locale/it/LC_MESSAGES/gettext-runtime.mo +0 -0
  1056. data/vendor/local/share/locale/it/LC_MESSAGES/glib20.mo +0 -0
  1057. data/vendor/local/share/locale/ja/LC_MESSAGES/gettext-runtime.mo +0 -0
  1058. data/vendor/local/share/locale/ja/LC_MESSAGES/glib20.mo +0 -0
  1059. data/vendor/local/share/locale/ka/LC_MESSAGES/glib20.mo +0 -0
  1060. data/vendor/local/share/locale/kk/LC_MESSAGES/glib20.mo +0 -0
  1061. data/vendor/local/share/locale/kn/LC_MESSAGES/glib20.mo +0 -0
  1062. data/vendor/local/share/locale/ko/LC_MESSAGES/gettext-runtime.mo +0 -0
  1063. data/vendor/local/share/locale/ko/LC_MESSAGES/glib20.mo +0 -0
  1064. data/vendor/local/share/locale/ku/LC_MESSAGES/glib20.mo +0 -0
  1065. data/vendor/local/share/locale/locale.alias +0 -77
  1066. data/vendor/local/share/locale/lt/LC_MESSAGES/glib20.mo +0 -0
  1067. data/vendor/local/share/locale/lv/LC_MESSAGES/glib20.mo +0 -0
  1068. data/vendor/local/share/locale/mai/LC_MESSAGES/glib20.mo +0 -0
  1069. data/vendor/local/share/locale/mg/LC_MESSAGES/glib20.mo +0 -0
  1070. data/vendor/local/share/locale/mk/LC_MESSAGES/glib20.mo +0 -0
  1071. data/vendor/local/share/locale/ml/LC_MESSAGES/glib20.mo +0 -0
  1072. data/vendor/local/share/locale/mn/LC_MESSAGES/glib20.mo +0 -0
  1073. data/vendor/local/share/locale/mr/LC_MESSAGES/glib20.mo +0 -0
  1074. data/vendor/local/share/locale/ms/LC_MESSAGES/glib20.mo +0 -0
  1075. data/vendor/local/share/locale/nb/LC_MESSAGES/gettext-runtime.mo +0 -0
  1076. data/vendor/local/share/locale/nb/LC_MESSAGES/glib20.mo +0 -0
  1077. data/vendor/local/share/locale/nds/LC_MESSAGES/glib20.mo +0 -0
  1078. data/vendor/local/share/locale/ne/LC_MESSAGES/glib20.mo +0 -0
  1079. data/vendor/local/share/locale/nl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1080. data/vendor/local/share/locale/nl/LC_MESSAGES/glib20.mo +0 -0
  1081. data/vendor/local/share/locale/nn/LC_MESSAGES/gettext-runtime.mo +0 -0
  1082. data/vendor/local/share/locale/nn/LC_MESSAGES/glib20.mo +0 -0
  1083. data/vendor/local/share/locale/oc/LC_MESSAGES/glib20.mo +0 -0
  1084. data/vendor/local/share/locale/or/LC_MESSAGES/glib20.mo +0 -0
  1085. data/vendor/local/share/locale/pa/LC_MESSAGES/glib20.mo +0 -0
  1086. data/vendor/local/share/locale/pl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1087. data/vendor/local/share/locale/pl/LC_MESSAGES/glib20.mo +0 -0
  1088. data/vendor/local/share/locale/ps/LC_MESSAGES/glib20.mo +0 -0
  1089. data/vendor/local/share/locale/pt/LC_MESSAGES/gettext-runtime.mo +0 -0
  1090. data/vendor/local/share/locale/pt/LC_MESSAGES/glib20.mo +0 -0
  1091. data/vendor/local/share/locale/pt_BR/LC_MESSAGES/gettext-runtime.mo +0 -0
  1092. data/vendor/local/share/locale/pt_BR/LC_MESSAGES/glib20.mo +0 -0
  1093. data/vendor/local/share/locale/ro/LC_MESSAGES/gettext-runtime.mo +0 -0
  1094. data/vendor/local/share/locale/ro/LC_MESSAGES/glib20.mo +0 -0
  1095. data/vendor/local/share/locale/ru/LC_MESSAGES/gettext-runtime.mo +0 -0
  1096. data/vendor/local/share/locale/ru/LC_MESSAGES/glib20.mo +0 -0
  1097. data/vendor/local/share/locale/rw/LC_MESSAGES/glib20.mo +0 -0
  1098. data/vendor/local/share/locale/si/LC_MESSAGES/glib20.mo +0 -0
  1099. data/vendor/local/share/locale/sk/LC_MESSAGES/gettext-runtime.mo +0 -0
  1100. data/vendor/local/share/locale/sk/LC_MESSAGES/glib20.mo +0 -0
  1101. data/vendor/local/share/locale/sl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1102. data/vendor/local/share/locale/sl/LC_MESSAGES/glib20.mo +0 -0
  1103. data/vendor/local/share/locale/sq/LC_MESSAGES/glib20.mo +0 -0
  1104. data/vendor/local/share/locale/sr/LC_MESSAGES/gettext-runtime.mo +0 -0
  1105. data/vendor/local/share/locale/sr/LC_MESSAGES/glib20.mo +0 -0
  1106. data/vendor/local/share/locale/sr@ije/LC_MESSAGES/glib20.mo +0 -0
  1107. data/vendor/local/share/locale/sr@latin/LC_MESSAGES/glib20.mo +0 -0
  1108. data/vendor/local/share/locale/sv/LC_MESSAGES/gettext-runtime.mo +0 -0
  1109. data/vendor/local/share/locale/sv/LC_MESSAGES/glib20.mo +0 -0
  1110. data/vendor/local/share/locale/ta/LC_MESSAGES/glib20.mo +0 -0
  1111. data/vendor/local/share/locale/te/LC_MESSAGES/glib20.mo +0 -0
  1112. data/vendor/local/share/locale/th/LC_MESSAGES/glib20.mo +0 -0
  1113. data/vendor/local/share/locale/tl/LC_MESSAGES/glib20.mo +0 -0
  1114. data/vendor/local/share/locale/tr/LC_MESSAGES/gettext-runtime.mo +0 -0
  1115. data/vendor/local/share/locale/tr/LC_MESSAGES/glib20.mo +0 -0
  1116. data/vendor/local/share/locale/tt/LC_MESSAGES/glib20.mo +0 -0
  1117. data/vendor/local/share/locale/uk/LC_MESSAGES/gettext-runtime.mo +0 -0
  1118. data/vendor/local/share/locale/uk/LC_MESSAGES/glib20.mo +0 -0
  1119. data/vendor/local/share/locale/vi/LC_MESSAGES/gettext-runtime.mo +0 -0
  1120. data/vendor/local/share/locale/vi/LC_MESSAGES/glib20.mo +0 -0
  1121. data/vendor/local/share/locale/wa/LC_MESSAGES/glib20.mo +0 -0
  1122. data/vendor/local/share/locale/xh/LC_MESSAGES/glib20.mo +0 -0
  1123. data/vendor/local/share/locale/yi/LC_MESSAGES/glib20.mo +0 -0
  1124. data/vendor/local/share/locale/zh_CN/LC_MESSAGES/gettext-runtime.mo +0 -0
  1125. data/vendor/local/share/locale/zh_CN/LC_MESSAGES/glib20.mo +0 -0
  1126. data/vendor/local/share/locale/zh_HK/LC_MESSAGES/gettext-runtime.mo +0 -0
  1127. data/vendor/local/share/locale/zh_HK/LC_MESSAGES/glib20.mo +0 -0
  1128. data/vendor/local/share/locale/zh_TW/LC_MESSAGES/gettext-runtime.mo +0 -0
  1129. data/vendor/local/share/locale/zh_TW/LC_MESSAGES/glib20.mo +0 -0
  1130. data/vendor/local/share/man/man1/envsubst.1 +0 -54
  1131. data/vendor/local/share/man/man1/fc-cache.1 +0 -70
  1132. data/vendor/local/share/man/man1/fc-cat.1 +0 -44
  1133. data/vendor/local/share/man/man1/fc-list.1 +0 -72
  1134. data/vendor/local/share/man/man1/fc-match.1 +0 -73
  1135. data/vendor/local/share/man/man1/fc-query.1 +0 -57
  1136. data/vendor/local/share/man/man1/fc-scan.1 +0 -52
  1137. data/vendor/local/share/man/man1/gettext.1 +0 -69
  1138. data/vendor/local/share/man/man1/glib-genmarshal.1 +0 -312
  1139. data/vendor/local/share/man/man1/glib-mkenums.1 +0 -246
  1140. data/vendor/local/share/man/man1/gobject-query.1 +0 -83
  1141. data/vendor/local/share/man/man1/ngettext.1 +0 -68
  1142. data/vendor/local/share/man/man3/FcAtomicCreate.3 +0 -19
  1143. data/vendor/local/share/man/man3/FcAtomicDeleteNew.3 +0 -16
  1144. data/vendor/local/share/man/man3/FcAtomicDestroy.3 +0 -16
  1145. data/vendor/local/share/man/man3/FcAtomicLock.3 +0 -18
  1146. data/vendor/local/share/man/man3/FcAtomicNewFile.3 +0 -17
  1147. data/vendor/local/share/man/man3/FcAtomicOrigFile.3 +0 -16
  1148. data/vendor/local/share/man/man3/FcAtomicReplaceOrig.3 +0 -18
  1149. data/vendor/local/share/man/man3/FcAtomicUnlock.3 +0 -16
  1150. data/vendor/local/share/man/man3/FcBlanksAdd.3 +0 -18
  1151. data/vendor/local/share/man/man3/FcBlanksCreate.3 +0 -16
  1152. data/vendor/local/share/man/man3/FcBlanksDestroy.3 +0 -16
  1153. data/vendor/local/share/man/man3/FcBlanksIsMember.3 +0 -18
  1154. data/vendor/local/share/man/man3/FcCacheCopySet.3 +0 -18
  1155. data/vendor/local/share/man/man3/FcCacheDir.3 +0 -16
  1156. data/vendor/local/share/man/man3/FcCacheNumFont.3 +0 -17
  1157. data/vendor/local/share/man/man3/FcCacheNumSubdir.3 +0 -16
  1158. data/vendor/local/share/man/man3/FcCacheSubdir.3 +0 -20
  1159. data/vendor/local/share/man/man3/FcCharSetAddChar.3 +0 -19
  1160. data/vendor/local/share/man/man3/FcCharSetCopy.3 +0 -17
  1161. data/vendor/local/share/man/man3/FcCharSetCount.3 +0 -16
  1162. data/vendor/local/share/man/man3/FcCharSetCoverage.3 +0 -23
  1163. data/vendor/local/share/man/man3/FcCharSetCreate.3 +0 -17
  1164. data/vendor/local/share/man/man3/FcCharSetDestroy.3 +0 -18
  1165. data/vendor/local/share/man/man3/FcCharSetEqual.3 +0 -18
  1166. data/vendor/local/share/man/man3/FcCharSetFirstPage.3 +0 -20
  1167. data/vendor/local/share/man/man3/FcCharSetHasChar.3 +0 -17
  1168. data/vendor/local/share/man/man3/FcCharSetIntersect.3 +0 -18
  1169. data/vendor/local/share/man/man3/FcCharSetIntersectCount.3 +0 -17
  1170. data/vendor/local/share/man/man3/FcCharSetIsSubset.3 +0 -17
  1171. data/vendor/local/share/man/man3/FcCharSetMerge.3 +0 -23
  1172. data/vendor/local/share/man/man3/FcCharSetNew.3 +0 -16
  1173. data/vendor/local/share/man/man3/FcCharSetNextPage.3 +0 -20
  1174. data/vendor/local/share/man/man3/FcCharSetSubtract.3 +0 -17
  1175. data/vendor/local/share/man/man3/FcCharSetSubtractCount.3 +0 -17
  1176. data/vendor/local/share/man/man3/FcCharSetUnion.3 +0 -17
  1177. data/vendor/local/share/man/man3/FcConfigAppFontAddDir.3 +0 -20
  1178. data/vendor/local/share/man/man3/FcConfigAppFontAddFile.3 +0 -19
  1179. data/vendor/local/share/man/man3/FcConfigAppFontClear.3 +0 -17
  1180. data/vendor/local/share/man/man3/FcConfigBuildFonts.3 +0 -19
  1181. data/vendor/local/share/man/man3/FcConfigCreate.3 +0 -16
  1182. data/vendor/local/share/man/man3/FcConfigDestroy.3 +0 -19
  1183. data/vendor/local/share/man/man3/FcConfigEnableHome.3 +0 -20
  1184. data/vendor/local/share/man/man3/FcConfigFilename.3 +0 -26
  1185. data/vendor/local/share/man/man3/FcConfigGetBlanks.3 +0 -20
  1186. data/vendor/local/share/man/man3/FcConfigGetCache.3 +0 -17
  1187. data/vendor/local/share/man/man3/FcConfigGetCacheDirs.3 +0 -19
  1188. data/vendor/local/share/man/man3/FcConfigGetConfigDirs.3 +0 -18
  1189. data/vendor/local/share/man/man3/FcConfigGetConfigFiles.3 +0 -17
  1190. data/vendor/local/share/man/man3/FcConfigGetCurrent.3 +0 -16
  1191. data/vendor/local/share/man/man3/FcConfigGetFontDirs.3 +0 -19
  1192. data/vendor/local/share/man/man3/FcConfigGetFonts.3 +0 -20
  1193. data/vendor/local/share/man/man3/FcConfigGetRescanInterval.3 +0 -20
  1194. data/vendor/local/share/man/man3/FcConfigHome.3 +0 -18
  1195. data/vendor/local/share/man/man3/FcConfigParseAndLoad.3 +0 -23
  1196. data/vendor/local/share/man/man3/FcConfigReference.3 +0 -21
  1197. data/vendor/local/share/man/man3/FcConfigSetCurrent.3 +0 -17
  1198. data/vendor/local/share/man/man3/FcConfigSetRescanInterval.3 +0 -20
  1199. data/vendor/local/share/man/man3/FcConfigSubstitute.3 +0 -20
  1200. data/vendor/local/share/man/man3/FcConfigSubstituteWithPat.3 +0 -24
  1201. data/vendor/local/share/man/man3/FcConfigUptoDate.3 +0 -18
  1202. data/vendor/local/share/man/man3/FcDefaultSubstitute.3 +0 -27
  1203. data/vendor/local/share/man/man3/FcDirCacheLoad.3 +0 -21
  1204. data/vendor/local/share/man/man3/FcDirCacheLoadFile.3 +0 -19
  1205. data/vendor/local/share/man/man3/FcDirCacheRead.3 +0 -21
  1206. data/vendor/local/share/man/man3/FcDirCacheUnlink.3 +0 -20
  1207. data/vendor/local/share/man/man3/FcDirCacheUnload.3 +0 -17
  1208. data/vendor/local/share/man/man3/FcDirCacheValid.3 +0 -17
  1209. data/vendor/local/share/man/man3/FcDirSave.3 +0 -22
  1210. data/vendor/local/share/man/man3/FcDirScan.3 +0 -26
  1211. data/vendor/local/share/man/man3/FcFileIsDir.3 +0 -17
  1212. data/vendor/local/share/man/man3/FcFileScan.3 +0 -31
  1213. data/vendor/local/share/man/man3/FcFini.3 +0 -19
  1214. data/vendor/local/share/man/man3/FcFontList.3 +0 -21
  1215. data/vendor/local/share/man/man3/FcFontMatch.3 +0 -25
  1216. data/vendor/local/share/man/man3/FcFontRenderPrepare.3 +0 -21
  1217. data/vendor/local/share/man/man3/FcFontSetAdd.3 +0 -19
  1218. data/vendor/local/share/man/man3/FcFontSetCreate.3 +0 -16
  1219. data/vendor/local/share/man/man3/FcFontSetDestroy.3 +0 -17
  1220. data/vendor/local/share/man/man3/FcFontSetList.3 +0 -25
  1221. data/vendor/local/share/man/man3/FcFontSetMatch.3 +0 -28
  1222. data/vendor/local/share/man/man3/FcFontSetPrint.3 +0 -19
  1223. data/vendor/local/share/man/man3/FcFontSetSort.3 +0 -39
  1224. data/vendor/local/share/man/man3/FcFontSetSortDestroy.3 +0 -19
  1225. data/vendor/local/share/man/man3/FcFontSort.3 +0 -33
  1226. data/vendor/local/share/man/man3/FcFreeTypeCharIndex.3 +0 -22
  1227. data/vendor/local/share/man/man3/FcFreeTypeCharSet.3 +0 -21
  1228. data/vendor/local/share/man/man3/FcFreeTypeCharSetAndSpacing.3 +0 -28
  1229. data/vendor/local/share/man/man3/FcFreeTypeQuery.3 +0 -21
  1230. data/vendor/local/share/man/man3/FcFreeTypeQueryFace.3 +0 -21
  1231. data/vendor/local/share/man/man3/FcGetLangs.3 +0 -16
  1232. data/vendor/local/share/man/man3/FcGetVersion.3 +0 -16
  1233. data/vendor/local/share/man/man3/FcInit.3 +0 -19
  1234. data/vendor/local/share/man/man3/FcInitBringUptoDate.3 +0 -19
  1235. data/vendor/local/share/man/man3/FcInitLoadConfig.3 +0 -17
  1236. data/vendor/local/share/man/man3/FcInitLoadConfigAndFonts.3 +0 -17
  1237. data/vendor/local/share/man/man3/FcInitReinitialize.3 +0 -19
  1238. data/vendor/local/share/man/man3/FcIsLower.3 +0 -17
  1239. data/vendor/local/share/man/man3/FcIsUpper.3 +0 -17
  1240. data/vendor/local/share/man/man3/FcLangGetCharSet.3 +0 -16
  1241. data/vendor/local/share/man/man3/FcLangSetAdd.3 +0 -20
  1242. data/vendor/local/share/man/man3/FcLangSetCompare.3 +0 -22
  1243. data/vendor/local/share/man/man3/FcLangSetContains.3 +0 -22
  1244. data/vendor/local/share/man/man3/FcLangSetCopy.3 +0 -17
  1245. data/vendor/local/share/man/man3/FcLangSetCreate.3 +0 -16
  1246. data/vendor/local/share/man/man3/FcLangSetDestroy.3 +0 -17
  1247. data/vendor/local/share/man/man3/FcLangSetEqual.3 +0 -18
  1248. data/vendor/local/share/man/man3/FcLangSetGetLangs.3 +0 -16
  1249. data/vendor/local/share/man/man3/FcLangSetHasLang.3 +0 -23
  1250. data/vendor/local/share/man/man3/FcLangSetHash.3 +0 -20
  1251. data/vendor/local/share/man/man3/FcMatrixCopy.3 +0 -17
  1252. data/vendor/local/share/man/man3/FcMatrixEqual.3 +0 -19
  1253. data/vendor/local/share/man/man3/FcMatrixInit.3 +0 -17
  1254. data/vendor/local/share/man/man3/FcMatrixMultiply.3 +0 -20
  1255. data/vendor/local/share/man/man3/FcMatrixRotate.3 +0 -27
  1256. data/vendor/local/share/man/man3/FcMatrixScale.3 +0 -27
  1257. data/vendor/local/share/man/man3/FcMatrixShear.3 +0 -27
  1258. data/vendor/local/share/man/man3/FcNameConstant.3 +0 -18
  1259. data/vendor/local/share/man/man3/FcNameGetConstant.3 +0 -16
  1260. data/vendor/local/share/man/man3/FcNameGetObjectType.3 +0 -16
  1261. data/vendor/local/share/man/man3/FcNameParse.3 +0 -16
  1262. data/vendor/local/share/man/man3/FcNameRegisterConstants.3 +0 -19
  1263. data/vendor/local/share/man/man3/FcNameRegisterObjectTypes.3 +0 -19
  1264. data/vendor/local/share/man/man3/FcNameUnparse.3 +0 -18
  1265. data/vendor/local/share/man/man3/FcNameUnregisterConstants.3 +0 -19
  1266. data/vendor/local/share/man/man3/FcNameUnregisterObjectTypes.3 +0 -17
  1267. data/vendor/local/share/man/man3/FcObjectSetAdd.3 +0 -18
  1268. data/vendor/local/share/man/man3/FcObjectSetBuild.3 +0 -26
  1269. data/vendor/local/share/man/man3/FcObjectSetCreate.3 +0 -16
  1270. data/vendor/local/share/man/man3/FcObjectSetDestroy.3 +0 -16
  1271. data/vendor/local/share/man/man3/FcPatternAdd-Type.3 +0 -49
  1272. data/vendor/local/share/man/man3/FcPatternAdd.3 +0 -23
  1273. data/vendor/local/share/man/man3/FcPatternAddWeak.3 +0 -20
  1274. data/vendor/local/share/man/man3/FcPatternBuild.3 +0 -50
  1275. data/vendor/local/share/man/man3/FcPatternCreate.3 +0 -16
  1276. data/vendor/local/share/man/man3/FcPatternDel.3 +0 -18
  1277. data/vendor/local/share/man/man3/FcPatternDestroy.3 +0 -17
  1278. data/vendor/local/share/man/man3/FcPatternDuplicate.3 +0 -18
  1279. data/vendor/local/share/man/man3/FcPatternEqual.3 +0 -17
  1280. data/vendor/local/share/man/man3/FcPatternEqualSubset.3 +0 -19
  1281. data/vendor/local/share/man/man3/FcPatternFilter.3 +0 -20
  1282. data/vendor/local/share/man/man3/FcPatternFormat.3 +0 -205
  1283. data/vendor/local/share/man/man3/FcPatternGet-Type.3 +0 -56
  1284. data/vendor/local/share/man/man3/FcPatternGet.3 +0 -22
  1285. data/vendor/local/share/man/man3/FcPatternHash.3 +0 -17
  1286. data/vendor/local/share/man/man3/FcPatternPrint.3 +0 -18
  1287. data/vendor/local/share/man/man3/FcPatternReference.3 +0 -17
  1288. data/vendor/local/share/man/man3/FcPatternRemove.3 +0 -19
  1289. data/vendor/local/share/man/man3/FcStrBasename.3 +0 -18
  1290. data/vendor/local/share/man/man3/FcStrCmp.3 +0 -18
  1291. data/vendor/local/share/man/man3/FcStrCmpIgnoreCase.3 +0 -19
  1292. data/vendor/local/share/man/man3/FcStrCopy.3 +0 -18
  1293. data/vendor/local/share/man/man3/FcStrCopyFilename.3 +0 -23
  1294. data/vendor/local/share/man/man3/FcStrDirname.3 +0 -18
  1295. data/vendor/local/share/man/man3/FcStrDowncase.3 +0 -17
  1296. data/vendor/local/share/man/man3/FcStrFree.3 +0 -17
  1297. data/vendor/local/share/man/man3/FcStrListCreate.3 +0 -16
  1298. data/vendor/local/share/man/man3/FcStrListDone.3 +0 -16
  1299. data/vendor/local/share/man/man3/FcStrListNext.3 +0 -16
  1300. data/vendor/local/share/man/man3/FcStrPlus.3 +0 -19
  1301. data/vendor/local/share/man/man3/FcStrSetAdd.3 +0 -17
  1302. data/vendor/local/share/man/man3/FcStrSetAddFilename.3 +0 -19
  1303. data/vendor/local/share/man/man3/FcStrSetCreate.3 +0 -16
  1304. data/vendor/local/share/man/man3/FcStrSetDel.3 +0 -18
  1305. data/vendor/local/share/man/man3/FcStrSetDestroy.3 +0 -16
  1306. data/vendor/local/share/man/man3/FcStrSetEqual.3 +0 -19
  1307. data/vendor/local/share/man/man3/FcStrSetMember.3 +0 -18
  1308. data/vendor/local/share/man/man3/FcStrStr.3 +0 -20
  1309. data/vendor/local/share/man/man3/FcStrStrIgnoreCase.3 +0 -20
  1310. data/vendor/local/share/man/man3/FcToLower.3 +0 -17
  1311. data/vendor/local/share/man/man3/FcUcs4ToUtf8.3 +0 -19
  1312. data/vendor/local/share/man/man3/FcUtf16Len.3 +0 -27
  1313. data/vendor/local/share/man/man3/FcUtf16ToUcs4.3 +0 -23
  1314. data/vendor/local/share/man/man3/FcUtf8Len.3 +0 -24
  1315. data/vendor/local/share/man/man3/FcUtf8ToUcs4.3 +0 -21
  1316. data/vendor/local/share/man/man3/FcValueDestroy.3 +0 -17
  1317. data/vendor/local/share/man/man3/FcValueEqual.3 +0 -19
  1318. data/vendor/local/share/man/man3/FcValuePrint.3 +0 -18
  1319. data/vendor/local/share/man/man3/FcValueSave.3 +0 -17
  1320. data/vendor/local/share/man/man3/bind_textdomain_codeset.3 +0 -72
  1321. data/vendor/local/share/man/man3/bindtextdomain.3 +0 -69
  1322. data/vendor/local/share/man/man3/dcgettext.3 +0 -1
  1323. data/vendor/local/share/man/man3/dcngettext.3 +0 -1
  1324. data/vendor/local/share/man/man3/dgettext.3 +0 -1
  1325. data/vendor/local/share/man/man3/dngettext.3 +0 -1
  1326. data/vendor/local/share/man/man3/gettext.3 +0 -99
  1327. data/vendor/local/share/man/man3/libpng.3 +0 -4455
  1328. data/vendor/local/share/man/man3/libpngpf.3 +0 -808
  1329. data/vendor/local/share/man/man3/ngettext.3 +0 -60
  1330. data/vendor/local/share/man/man3/textdomain.3 +0 -57
  1331. data/vendor/local/share/man/man5/fonts-conf.5 +0 -644
  1332. data/vendor/local/share/man/man5/png.5 +0 -74
  1333. data/vendor/local/src/tml/packaging/cairo_1.10.0-2_win32.log +0 -1263
  1334. data/vendor/local/src/tml/packaging/cairo_1.10.0-2_win32.sh +0 -84
  1335. data/vendor/local/src/tml/packaging/expat_2.0.1-1_win32.log +0 -188
  1336. data/vendor/local/src/tml/packaging/expat_2.0.1-1_win32.sh +0 -68
  1337. data/vendor/local/src/tml/packaging/fontconfig_2.8.0-2_win32.log +0 -999
  1338. data/vendor/local/src/tml/packaging/fontconfig_2.8.0-2_win32.sh +0 -79
  1339. data/vendor/local/src/tml/packaging/freetype_2.4.2-1_win32.log +0 -364
  1340. data/vendor/local/src/tml/packaging/freetype_2.4.2-1_win32.sh +0 -93
  1341. data/vendor/local/src/tml/packaging/gettext_0.18.1.1-2_win32.log +0 -10423
  1342. data/vendor/local/src/tml/packaging/gettext_0.18.1.1-2_win32.sh +0 -457
  1343. data/vendor/local/src/tml/packaging/glib_2.26.0-2_win32.log +0 -2867
  1344. data/vendor/local/src/tml/packaging/glib_2.26.0-2_win32.sh +0 -64
  1345. data/vendor/local/src/tml/packaging/libpng_1.4.3-1_win32.log +0 -272
  1346. data/vendor/local/src/tml/packaging/libpng_1.4.3-1_win32.sh +0 -71
  1347. data/vendor/local/src/tml/packaging/zlib_1.2.5-2_win32.log +0 -42
  1348. data/vendor/local/src/tml/packaging/zlib_1.2.5-2_win32.sh +0 -189
@@ -1,3411 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html>
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <title>Threads</title>
6
- <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
7
- <link rel="home" href="index.html" title="GLib Reference Manual">
8
- <link rel="up" href="glib-core.html" title="GLib Core Application Support">
9
- <link rel="prev" href="glib-The-Main-Event-Loop.html" title="The Main Event Loop">
10
- <link rel="next" href="glib-Thread-Pools.html" title="Thread Pools">
11
- <meta name="generator" content="GTK-Doc V1.15.1 (XML mode)">
12
- <link rel="stylesheet" href="style.css" type="text/css">
13
- </head>
14
- <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15
- <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
16
- <tr valign="middle">
17
- <td><a accesskey="p" href="glib-The-Main-Event-Loop.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
18
- <td><a accesskey="u" href="glib-core.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
19
- <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
20
- <th width="100%" align="center">GLib Reference Manual</th>
21
- <td><a accesskey="n" href="glib-Thread-Pools.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
22
- </tr>
23
- <tr><td colspan="5" class="shortcuts">
24
- <a href="#glib-Threads.synopsis" class="shortcut">Top</a>
25
-  | 
26
- <a href="#glib-Threads.description" class="shortcut">Description</a>
27
- </td></tr>
28
- </table>
29
- <div class="refentry">
30
- <a name="glib-Threads"></a><div class="titlepage"></div>
31
- <div class="refnamediv"><table width="100%"><tr>
32
- <td valign="top">
33
- <h2><span class="refentrytitle"><a name="glib-Threads.top_of_page"></a>Threads</span></h2>
34
- <p>Threads — thread abstraction; including threads, different
35
- mutexes, conditions and thread private data</p>
36
- </td>
37
- <td valign="top" align="right"></td>
38
- </tr></table></div>
39
- <div class="refsynopsisdiv">
40
- <a name="glib-Threads.synopsis"></a><h2>Synopsis</h2>
41
- <pre class="synopsis">
42
- #include &lt;glib.h&gt;
43
-
44
- #define <a class="link" href="glib-Threads.html#G-THREADS-ENABLED:CAPS" title="G_THREADS_ENABLED">G_THREADS_ENABLED</a>
45
- #define <a class="link" href="glib-Threads.html#G-THREADS-IMPL-POSIX:CAPS" title="G_THREADS_IMPL_POSIX">G_THREADS_IMPL_POSIX</a>
46
- #define <a class="link" href="glib-Threads.html#G-THREADS-IMPL-NONE:CAPS" title="G_THREADS_IMPL_NONE">G_THREADS_IMPL_NONE</a>
47
-
48
- #define <a class="link" href="glib-Threads.html#G-THREAD-ERROR:CAPS" title="G_THREAD_ERROR">G_THREAD_ERROR</a>
49
- enum <a class="link" href="glib-Threads.html#GThreadError" title="enum GThreadError">GThreadError</a>;
50
-
51
- <a class="link" href="glib-Threads.html#GThreadFunctions" title="GThreadFunctions">GThreadFunctions</a>;
52
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()">g_thread_init</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadFunctions" title="GThreadFunctions"><span class="type">GThreadFunctions</span></a> *vtable</code></em>);
53
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-thread-supported" title="g_thread_supported ()">g_thread_supported</a> ();
54
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-thread-get-initialized" title="g_thread_get_initialized ()">g_thread_get_initialized</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
55
-
56
- <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> (<a class="link" href="glib-Threads.html#GThreadFunc" title="GThreadFunc ()">*GThreadFunc</a>) (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>);
57
- enum <a class="link" href="glib-Threads.html#GThreadPriority" title="enum GThreadPriority">GThreadPriority</a>;
58
- <a class="link" href="glib-Threads.html#GThread" title="GThread">GThread</a>;
59
- <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="returnvalue">GThread</span></a> * <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()">g_thread_create</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadFunc" title="GThreadFunc ()"><span class="type">GThreadFunc</span></a> func</code></em>,
60
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
61
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="type">gboolean</span></a> joinable</code></em>,
62
- <em class="parameter"><code><a class="link" href="glib-Error-Reporting.html#GError" title="GError"><span class="type">GError</span></a> **error</code></em>);
63
- <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="returnvalue">GThread</span></a> * <a class="link" href="glib-Threads.html#g-thread-create-full" title="g_thread_create_full ()">g_thread_create_full</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadFunc" title="GThreadFunc ()"><span class="type">GThreadFunc</span></a> func</code></em>,
64
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
65
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gulong" title="gulong"><span class="type">gulong</span></a> stack_size</code></em>,
66
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="type">gboolean</span></a> joinable</code></em>,
67
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="type">gboolean</span></a> bound</code></em>,
68
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadPriority" title="enum GThreadPriority"><span class="type">GThreadPriority</span></a> priority</code></em>,
69
- <em class="parameter"><code><a class="link" href="glib-Error-Reporting.html#GError" title="GError"><span class="type">GError</span></a> **error</code></em>);
70
- <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="returnvalue">GThread</span></a> * <a class="link" href="glib-Threads.html#g-thread-self" title="g_thread_self ()">g_thread_self</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
71
- <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()">g_thread_join</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> *thread</code></em>);
72
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-thread-set-priority" title="g_thread_set_priority ()">g_thread_set_priority</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> *thread</code></em>,
73
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadPriority" title="enum GThreadPriority"><span class="type">GThreadPriority</span></a> priority</code></em>);
74
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-thread-yield" title="g_thread_yield ()">g_thread_yield</a> ();
75
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-thread-exit" title="g_thread_exit ()">g_thread_exit</a> (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> retval</code></em>);
76
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-thread-foreach" title="g_thread_foreach ()">g_thread_foreach</a> (<em class="parameter"><code><a class="link" href="glib-Doubly-Linked-Lists.html#GFunc" title="GFunc ()"><span class="type">GFunc</span></a> thread_func</code></em>,
77
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
78
-
79
- <a class="link" href="glib-Threads.html#GMutex" title="GMutex">GMutex</a>;
80
- <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="returnvalue">GMutex</span></a> * <a class="link" href="glib-Threads.html#g-mutex-new" title="g_mutex_new ()">g_mutex_new</a> ();
81
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-mutex-lock" title="g_mutex_lock ()">g_mutex_lock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);
82
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-mutex-trylock" title="g_mutex_trylock ()">g_mutex_trylock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);
83
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-mutex-unlock" title="g_mutex_unlock ()">g_mutex_unlock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);
84
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-mutex-free" title="g_mutex_free ()">g_mutex_free</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);
85
-
86
- <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex">GStaticMutex</a>;
87
- #define <a class="link" href="glib-Threads.html#G-STATIC-MUTEX-INIT:CAPS" title="G_STATIC_MUTEX_INIT">G_STATIC_MUTEX_INIT</a>
88
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-mutex-init" title="g_static_mutex_init ()">g_static_mutex_init</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);
89
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-mutex-lock" title="g_static_mutex_lock ()">g_static_mutex_lock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);
90
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-static-mutex-trylock" title="g_static_mutex_trylock ()">g_static_mutex_trylock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);
91
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-mutex-unlock" title="g_static_mutex_unlock ()">g_static_mutex_unlock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);
92
- <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="returnvalue">GMutex</span></a> * <a class="link" href="glib-Threads.html#g-static-mutex-get-mutex" title="g_static_mutex_get_mutex ()">g_static_mutex_get_mutex</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);
93
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-mutex-free" title="g_static_mutex_free ()">g_static_mutex_free</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);
94
-
95
- #define <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()">G_LOCK_DEFINE</a> (name)
96
- #define <a class="link" href="glib-Threads.html#G-LOCK-DEFINE-STATIC:CAPS" title="G_LOCK_DEFINE_STATIC()">G_LOCK_DEFINE_STATIC</a> (name)
97
- #define <a class="link" href="glib-Threads.html#G-LOCK-EXTERN:CAPS" title="G_LOCK_EXTERN()">G_LOCK_EXTERN</a> (name)
98
- #define <a class="link" href="glib-Threads.html#G-LOCK:CAPS" title="G_LOCK()">G_LOCK</a> (name)
99
- #define <a class="link" href="glib-Threads.html#G-TRYLOCK:CAPS" title="G_TRYLOCK()">G_TRYLOCK</a> (name)
100
- #define <a class="link" href="glib-Threads.html#G-UNLOCK:CAPS" title="G_UNLOCK()">G_UNLOCK</a> (name)
101
-
102
- <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex">GStaticRecMutex</a>;
103
- #define <a class="link" href="glib-Threads.html#G-STATIC-REC-MUTEX-INIT:CAPS" title="G_STATIC_REC_MUTEX_INIT">G_STATIC_REC_MUTEX_INIT</a>
104
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rec-mutex-init" title="g_static_rec_mutex_init ()">g_static_rec_mutex_init</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);
105
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rec-mutex-lock" title="g_static_rec_mutex_lock ()">g_static_rec_mutex_lock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);
106
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-static-rec-mutex-trylock" title="g_static_rec_mutex_trylock ()">g_static_rec_mutex_trylock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);
107
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rec-mutex-unlock" title="g_static_rec_mutex_unlock ()">g_static_rec_mutex_unlock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);
108
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rec-mutex-lock-full" title="g_static_rec_mutex_lock_full ()">g_static_rec_mutex_lock_full</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>,
109
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="type">guint</span></a> depth</code></em>);
110
- <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> <a class="link" href="glib-Threads.html#g-static-rec-mutex-unlock-full" title="g_static_rec_mutex_unlock_full ()">g_static_rec_mutex_unlock_full</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);
111
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rec-mutex-free" title="g_static_rec_mutex_free ()">g_static_rec_mutex_free</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);
112
-
113
- <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock">GStaticRWLock</a>;
114
- #define <a class="link" href="glib-Threads.html#G-STATIC-RW-LOCK-INIT:CAPS" title="G_STATIC_RW_LOCK_INIT">G_STATIC_RW_LOCK_INIT</a>
115
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rw-lock-init" title="g_static_rw_lock_init ()">g_static_rw_lock_init</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
116
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rw-lock-reader-lock" title="g_static_rw_lock_reader_lock ()">g_static_rw_lock_reader_lock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
117
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-static-rw-lock-reader-trylock" title="g_static_rw_lock_reader_trylock ()">g_static_rw_lock_reader_trylock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
118
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rw-lock-reader-unlock" title="g_static_rw_lock_reader_unlock ()">g_static_rw_lock_reader_unlock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
119
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rw-lock-writer-lock" title="g_static_rw_lock_writer_lock ()">g_static_rw_lock_writer_lock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
120
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-static-rw-lock-writer-trylock" title="g_static_rw_lock_writer_trylock ()">g_static_rw_lock_writer_trylock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
121
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rw-lock-writer-unlock" title="g_static_rw_lock_writer_unlock ()">g_static_rw_lock_writer_unlock</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
122
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-rw-lock-free" title="g_static_rw_lock_free ()">g_static_rw_lock_free</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);
123
-
124
- <a class="link" href="glib-Threads.html#GCond" title="GCond">GCond</a>;
125
- <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="returnvalue">GCond</span></a>* <a class="link" href="glib-Threads.html#g-cond-new" title="g_cond_new ()">g_cond_new</a> ();
126
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-cond-signal" title="g_cond_signal ()">g_cond_signal</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>);
127
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-cond-broadcast" title="g_cond_broadcast ()">g_cond_broadcast</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>);
128
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-cond-wait" title="g_cond_wait ()">g_cond_wait</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>,
129
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);
130
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-cond-timed-wait" title="g_cond_timed_wait ()">g_cond_timed_wait</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>,
131
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>,
132
- <em class="parameter"><code><a class="link" href="glib-Date-and-Time-Functions.html#GTimeVal" title="GTimeVal"><span class="type">GTimeVal</span></a> *abs_time</code></em>);
133
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-cond-free" title="g_cond_free ()">g_cond_free</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>);
134
-
135
- <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate">GPrivate</a>;
136
- <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="returnvalue">GPrivate</span></a>* <a class="link" href="glib-Threads.html#g-private-new" title="g_private_new ()">g_private_new</a> (<em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> destructor</code></em>);
137
- <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="glib-Threads.html#g-private-get" title="g_private_get ()">g_private_get</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> *private_key</code></em>);
138
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-private-set" title="g_private_set ()">g_private_set</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> *private_key</code></em>,
139
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>);
140
-
141
- <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate">GStaticPrivate</a>;
142
- #define <a class="link" href="glib-Threads.html#G-STATIC-PRIVATE-INIT:CAPS" title="G_STATIC_PRIVATE_INIT">G_STATIC_PRIVATE_INIT</a>
143
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-private-init" title="g_static_private_init ()">g_static_private_init</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>);
144
- <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="glib-Threads.html#g-static-private-get" title="g_static_private_get ()">g_static_private_get</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>);
145
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-private-set" title="g_static_private_set ()">g_static_private_set</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>,
146
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
147
- <em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> notify</code></em>);
148
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-static-private-free" title="g_static_private_free ()">g_static_private_free</a> (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>);
149
-
150
- <a class="link" href="glib-Threads.html#GOnce" title="GOnce">GOnce</a>;
151
- enum <a class="link" href="glib-Threads.html#GOnceStatus" title="enum GOnceStatus">GOnceStatus</a>;
152
- #define <a class="link" href="glib-Threads.html#G-ONCE-INIT:CAPS" title="G_ONCE_INIT">G_ONCE_INIT</a>
153
- #define <a class="link" href="glib-Threads.html#g-once" title="g_once()">g_once</a> (once,
154
- func,
155
- arg)
156
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-once-init-enter" title="g_once_init_enter ()">g_once_init_enter</a> (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> *value_location</code></em>);
157
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-once-init-leave" title="g_once_init_leave ()">g_once_init_leave</a> (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> *value_location</code></em>,
158
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> initialization_value</code></em>);
159
-
160
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-bit-lock" title="g_bit_lock ()">g_bit_lock</a> (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> *address</code></em>,
161
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> lock_bit</code></em>);
162
- <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Threads.html#g-bit-trylock" title="g_bit_trylock ()">g_bit_trylock</a> (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> *address</code></em>,
163
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> lock_bit</code></em>);
164
- <span class="returnvalue">void</span> <a class="link" href="glib-Threads.html#g-bit-unlock" title="g_bit_unlock ()">g_bit_unlock</a> (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> *address</code></em>,
165
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> lock_bit</code></em>);
166
- </pre>
167
- </div>
168
- <div class="refsect1">
169
- <a name="glib-Threads.description"></a><h2>Description</h2>
170
- <p>
171
- Threads act almost like processes, but unlike processes all threads
172
- of one process share the same memory. This is good, as it provides
173
- easy communication between the involved threads via this shared
174
- memory, and it is bad, because strange things (so called
175
- "Heisenbugs") might happen if the program is not carefully designed.
176
- In particular, due to the concurrent nature of threads, no
177
- assumptions on the order of execution of code running in different
178
- threads can be made, unless order is explicitly forced by the
179
- programmer through synchronization primitives.
180
- </p>
181
- <p>
182
- The aim of the thread related functions in GLib is to provide a
183
- portable means for writing multi-threaded software. There are
184
- primitives for mutexes to protect the access to portions of memory
185
- (<a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>, <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>, <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()"><span class="type">G_LOCK_DEFINE</span></a>, <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> and
186
- <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a>). There are primitives for condition variables to
187
- allow synchronization of threads (<a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>). There are primitives for
188
- thread-private data - data that every thread has a private instance
189
- of (<a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>, <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a>). Last but definitely not least there
190
- are primitives to portably create and manage threads (<a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a>).
191
- </p>
192
- <p>
193
- The threading system is initialized with <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>, which
194
- takes an optional custom thread implementation or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> for the
195
- default implementation. If you want to call <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> with a
196
- non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> argument this must be done before executing any other GLib
197
- functions (except <a class="link" href="glib-Memory-Allocation.html#g-mem-set-vtable" title="g_mem_set_vtable ()"><code class="function">g_mem_set_vtable()</code></a>). This is a requirement even if
198
- no threads are in fact ever created by the process.
199
- </p>
200
- <p>
201
- Calling <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> with a <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> argument is somewhat more
202
- relaxed. You may call any other glib functions in the main thread
203
- before <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> as long as <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> is not called from
204
- a glib callback, or with any locks held. However, many libraries
205
- above glib does not support late initialization of threads, so doing
206
- this should be avoided if possible.
207
- </p>
208
- <p>
209
- Please note that since version 2.24 the GObject initialization
210
- function <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#g-type-init"><code class="function">g_type_init()</code></a> initializes threads (with a <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> argument),
211
- so most applications, including those using Gtk+ will run with
212
- threads enabled. If you want a special thread implementation, make
213
- sure you call <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> before <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#g-type-init"><code class="function">g_type_init()</code></a> is called.
214
- </p>
215
- <p>
216
- After calling <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>, GLib is completely thread safe (all
217
- global data is automatically locked), but individual data structure
218
- instances are not automatically locked for performance reasons. So,
219
- for example you must coordinate accesses to the same <a class="link" href="glib-Hash-Tables.html#GHashTable" title="GHashTable"><span class="type">GHashTable</span></a>
220
- from multiple threads. The two notable exceptions from this rule
221
- are <a class="link" href="glib-The-Main-Event-Loop.html#GMainLoop" title="GMainLoop"><span class="type">GMainLoop</span></a> and <a class="link" href="glib-Asynchronous-Queues.html#GAsyncQueue" title="GAsyncQueue"><span class="type">GAsyncQueue</span></a>, which <span class="emphasis"><em>are</em></span>
222
- threadsafe and need no further application-level locking to be
223
- accessed from multiple threads.
224
- </p>
225
- <p>
226
- To help debugging problems in multithreaded applications, GLib
227
- supports error-checking mutexes that will give you helpful error
228
- messages on common problems. To use error-checking mutexes, define
229
- the symbol <span class="type">G_ERRORCHECK_MUTEXES</span> when compiling the application.
230
- </p>
231
- </div>
232
- <div class="refsect1">
233
- <a name="glib-Threads.details"></a><h2>Details</h2>
234
- <div class="refsect2">
235
- <a name="G-THREADS-ENABLED:CAPS"></a><h3>G_THREADS_ENABLED</h3>
236
- <pre class="programlisting">#define G_THREADS_ENABLED
237
- </pre>
238
- <p>
239
- This macro is defined if GLib was compiled with thread support. This
240
- does not necessarily mean that there is a thread implementation
241
- available, but it does mean that the infrastructure is in place and
242
- that once you provide a thread implementation to <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>,
243
- GLib will be multi-thread safe. If <a class="link" href="glib-Threads.html#G-THREADS-ENABLED:CAPS" title="G_THREADS_ENABLED"><span class="type">G_THREADS_ENABLED</span></a> is not
244
- defined, then Glib is not, and cannot be, multi-thread safe.
245
- </p>
246
- </div>
247
- <hr>
248
- <div class="refsect2">
249
- <a name="G-THREADS-IMPL-POSIX:CAPS"></a><h3>G_THREADS_IMPL_POSIX</h3>
250
- <pre class="programlisting">#define G_THREADS_IMPL_POSIX
251
- </pre>
252
- <p>
253
- This macro is defined if POSIX style threads are used.
254
- </p>
255
- </div>
256
- <hr>
257
- <div class="refsect2">
258
- <a name="G-THREADS-IMPL-NONE:CAPS"></a><h3>G_THREADS_IMPL_NONE</h3>
259
- <pre class="programlisting">#define G_THREADS_IMPL_NONE
260
- </pre>
261
- <p>
262
- This macro is defined if no thread implementation is used. You can,
263
- however, provide one to <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> to make GLib multi-thread
264
- safe.
265
- </p>
266
- </div>
267
- <hr>
268
- <div class="refsect2">
269
- <a name="G-THREAD-ERROR:CAPS"></a><h3>G_THREAD_ERROR</h3>
270
- <pre class="programlisting">#define G_THREAD_ERROR g_thread_error_quark ()
271
- </pre>
272
- <p>
273
- The error domain of the GLib thread subsystem.
274
- </p>
275
- </div>
276
- <hr>
277
- <div class="refsect2">
278
- <a name="GThreadError"></a><h3>enum GThreadError</h3>
279
- <pre class="programlisting">typedef enum
280
- {
281
- G_THREAD_ERROR_AGAIN /* Resource temporarily unavailable */
282
- } GThreadError;
283
- </pre>
284
- <p>
285
- Possible errors of thread related functions.
286
- </p>
287
- <div class="variablelist"><table border="0">
288
- <col align="left" valign="top">
289
- <tbody><tr>
290
- <td><p><a name="G-THREAD-ERROR-AGAIN:CAPS"></a><span class="term"><code class="literal">G_THREAD_ERROR_AGAIN</code></span></p></td>
291
- <td>a thread couldn't be created due to resource
292
- shortage. Try again later.
293
- </td>
294
- </tr></tbody>
295
- </table></div>
296
- </div>
297
- <hr>
298
- <div class="refsect2">
299
- <a name="GThreadFunctions"></a><h3>GThreadFunctions</h3>
300
- <pre class="programlisting">typedef struct {
301
- GMutex* (*mutex_new) (void);
302
- void (*mutex_lock) (GMutex *mutex);
303
- gboolean (*mutex_trylock) (GMutex *mutex);
304
- void (*mutex_unlock) (GMutex *mutex);
305
- void (*mutex_free) (GMutex *mutex);
306
- GCond* (*cond_new) (void);
307
- void (*cond_signal) (GCond *cond);
308
- void (*cond_broadcast) (GCond *cond);
309
- void (*cond_wait) (GCond *cond,
310
- GMutex *mutex);
311
- gboolean (*cond_timed_wait) (GCond *cond,
312
- GMutex *mutex,
313
- GTimeVal *end_time);
314
- void (*cond_free) (GCond *cond);
315
- GPrivate* (*private_new) (GDestroyNotify destructor);
316
- gpointer (*private_get) (GPrivate *private_key);
317
- void (*private_set) (GPrivate *private_key,
318
- gpointer data);
319
- void (*thread_create) (GThreadFunc func,
320
- gpointer data,
321
- gulong stack_size,
322
- gboolean joinable,
323
- gboolean bound,
324
- GThreadPriority priority,
325
- gpointer thread,
326
- GError **error);
327
- void (*thread_yield) (void);
328
- void (*thread_join) (gpointer thread);
329
- void (*thread_exit) (void);
330
- void (*thread_set_priority)(gpointer thread,
331
- GThreadPriority priority);
332
- void (*thread_self) (gpointer thread);
333
- gboolean (*thread_equal) (gpointer thread1,
334
- gpointer thread2);
335
- } GThreadFunctions;
336
- </pre>
337
- <p>
338
- This function table is used by <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> to initialize the
339
- thread system. The functions in the table are directly used by their
340
- g_* prepended counterparts (described in this document). For
341
- example, if you call <a class="link" href="glib-Threads.html#g-mutex-new" title="g_mutex_new ()"><code class="function">g_mutex_new()</code></a> then <code class="function">mutex_new()</code> from the table
342
- provided to <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> will be called.
343
- </p>
344
- <p>
345
- </p>
346
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
347
- <h3 class="title">Note</h3>
348
- <p>Do not use this struct unless you know what you are
349
- doing.</p>
350
- </div>
351
- <p>
352
- </p>
353
- <div class="variablelist"><table border="0">
354
- <col align="left" valign="top">
355
- <tbody>
356
- <tr>
357
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.mutex-new"></a>mutex_new</code></em> ()</span></p></td>
358
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-mutex-new" title="g_mutex_new ()"><code class="function">g_mutex_new()</code></a>
359
- </td>
360
- </tr>
361
- <tr>
362
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.mutex-lock"></a>mutex_lock</code></em> ()</span></p></td>
363
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-mutex-lock" title="g_mutex_lock ()"><code class="function">g_mutex_lock()</code></a>
364
- </td>
365
- </tr>
366
- <tr>
367
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.mutex-trylock"></a>mutex_trylock</code></em> ()</span></p></td>
368
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-mutex-trylock" title="g_mutex_trylock ()"><code class="function">g_mutex_trylock()</code></a>
369
- </td>
370
- </tr>
371
- <tr>
372
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.mutex-unlock"></a>mutex_unlock</code></em> ()</span></p></td>
373
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-mutex-unlock" title="g_mutex_unlock ()"><code class="function">g_mutex_unlock()</code></a>
374
- </td>
375
- </tr>
376
- <tr>
377
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.mutex-free"></a>mutex_free</code></em> ()</span></p></td>
378
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-mutex-free" title="g_mutex_free ()"><code class="function">g_mutex_free()</code></a>
379
- </td>
380
- </tr>
381
- <tr>
382
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.cond-new"></a>cond_new</code></em> ()</span></p></td>
383
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-cond-new" title="g_cond_new ()"><code class="function">g_cond_new()</code></a>
384
- </td>
385
- </tr>
386
- <tr>
387
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.cond-signal"></a>cond_signal</code></em> ()</span></p></td>
388
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-cond-signal" title="g_cond_signal ()"><code class="function">g_cond_signal()</code></a>
389
- </td>
390
- </tr>
391
- <tr>
392
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.cond-broadcast"></a>cond_broadcast</code></em> ()</span></p></td>
393
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-cond-broadcast" title="g_cond_broadcast ()"><code class="function">g_cond_broadcast()</code></a>
394
- </td>
395
- </tr>
396
- <tr>
397
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.cond-wait"></a>cond_wait</code></em> ()</span></p></td>
398
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-cond-wait" title="g_cond_wait ()"><code class="function">g_cond_wait()</code></a>
399
- </td>
400
- </tr>
401
- <tr>
402
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.cond-timed-wait"></a>cond_timed_wait</code></em> ()</span></p></td>
403
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-cond-timed-wait" title="g_cond_timed_wait ()"><code class="function">g_cond_timed_wait()</code></a>
404
- </td>
405
- </tr>
406
- <tr>
407
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.cond-free"></a>cond_free</code></em> ()</span></p></td>
408
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-cond-free" title="g_cond_free ()"><code class="function">g_cond_free()</code></a>
409
- </td>
410
- </tr>
411
- <tr>
412
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.private-new"></a>private_new</code></em> ()</span></p></td>
413
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-private-new" title="g_private_new ()"><code class="function">g_private_new()</code></a>
414
- </td>
415
- </tr>
416
- <tr>
417
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.private-get"></a>private_get</code></em> ()</span></p></td>
418
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-private-get" title="g_private_get ()"><code class="function">g_private_get()</code></a>
419
- </td>
420
- </tr>
421
- <tr>
422
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.private-set"></a>private_set</code></em> ()</span></p></td>
423
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-private-set" title="g_private_set ()"><code class="function">g_private_set()</code></a>
424
- </td>
425
- </tr>
426
- <tr>
427
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.thread-create"></a>thread_create</code></em> ()</span></p></td>
428
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()"><code class="function">g_thread_create()</code></a>
429
- </td>
430
- </tr>
431
- <tr>
432
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.thread-yield"></a>thread_yield</code></em> ()</span></p></td>
433
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-thread-yield" title="g_thread_yield ()"><code class="function">g_thread_yield()</code></a>
434
- </td>
435
- </tr>
436
- <tr>
437
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.thread-join"></a>thread_join</code></em> ()</span></p></td>
438
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()"><code class="function">g_thread_join()</code></a>
439
- </td>
440
- </tr>
441
- <tr>
442
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.thread-exit"></a>thread_exit</code></em> ()</span></p></td>
443
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-thread-exit" title="g_thread_exit ()"><code class="function">g_thread_exit()</code></a>
444
- </td>
445
- </tr>
446
- <tr>
447
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.thread-set-priority"></a>thread_set_priority</code></em> ()</span></p></td>
448
- <td>virtual function pointer for
449
- <a class="link" href="glib-Threads.html#g-thread-set-priority" title="g_thread_set_priority ()"><code class="function">g_thread_set_priority()</code></a>
450
- </td>
451
- </tr>
452
- <tr>
453
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.thread-self"></a>thread_self</code></em> ()</span></p></td>
454
- <td>virtual function pointer for <a class="link" href="glib-Threads.html#g-thread-self" title="g_thread_self ()"><code class="function">g_thread_self()</code></a>
455
- </td>
456
- </tr>
457
- <tr>
458
- <td><p><span class="term"><em class="structfield"><code><a name="GThreadFunctions.thread-equal"></a>thread_equal</code></em> ()</span></p></td>
459
- <td>used internally by recursive mutex locks and by some
460
- assertion checks
461
- </td>
462
- </tr>
463
- </tbody>
464
- </table></div>
465
- </div>
466
- <hr>
467
- <div class="refsect2">
468
- <a name="g-thread-init"></a><h3>g_thread_init ()</h3>
469
- <pre class="programlisting"><span class="returnvalue">void</span> g_thread_init (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadFunctions" title="GThreadFunctions"><span class="type">GThreadFunctions</span></a> *vtable</code></em>);</pre>
470
- <p>
471
- If you use GLib from more than one thread, you must initialize the
472
- thread system by calling <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>. Most of the time you will
473
- only have to call <code class="literal">g_thread_init (NULL)</code>.
474
- </p>
475
- <p>
476
- </p>
477
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
478
- <h3 class="title">Note</h3>
479
- <p>Do not call <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> with a non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> parameter unless
480
- you really know what you are doing.</p>
481
- </div>
482
- <p>
483
- </p>
484
- <p>
485
- </p>
486
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
487
- <h3 class="title">Note</h3>
488
- <p><a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> must not be called directly or indirectly as a
489
- callback from GLib. Also no mutexes may be currently locked while
490
- calling <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>.</p>
491
- </div>
492
- <p>
493
- </p>
494
- <p>
495
- </p>
496
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
497
- <h3 class="title">Note</h3>
498
- <p><a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> changes the way in which <a class="link" href="glib-Timers.html#GTimer" title="GTimer"><span class="type">GTimer</span></a> measures
499
- elapsed time. As a consequence, timers that are running while
500
- <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> is called may report unreliable times.</p>
501
- </div>
502
- <p>
503
- </p>
504
- <p>
505
- Calling <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> multiple times is allowed (since version
506
- 2.24), but nothing happens except for the first call. If the
507
- argument is non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> on such a call a warning will be printed, but
508
- otherwise the argument is ignored.
509
- </p>
510
- <p>
511
- If no thread system is available and <em class="parameter"><code>vtable</code></em> is <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> or if not all
512
- elements of <em class="parameter"><code>vtable</code></em> are non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, then <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> will abort.
513
- </p>
514
- <p>
515
- </p>
516
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
517
- <h3 class="title">Note</h3>
518
- <p>To use <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> in your program, you have to link with
519
- the libraries that the command <span class="command"><strong>pkg-config --libs
520
- gthread-2.0</strong></span> outputs. This is not the case for all the
521
- other thread related functions of GLib. Those can be used without
522
- having to link with the thread libraries.</p>
523
- </div>
524
- <p>
525
- </p>
526
- <div class="variablelist"><table border="0">
527
- <col align="left" valign="top">
528
- <tbody><tr>
529
- <td><p><span class="term"><em class="parameter"><code>vtable</code></em> :</span></p></td>
530
- <td>a function table of type <a class="link" href="glib-Threads.html#GThreadFunctions" title="GThreadFunctions"><span class="type">GThreadFunctions</span></a>, that provides
531
- the entry points to the thread system to be used.
532
- </td>
533
- </tr></tbody>
534
- </table></div>
535
- </div>
536
- <hr>
537
- <div class="refsect2">
538
- <a name="g-thread-supported"></a><h3>g_thread_supported ()</h3>
539
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_thread_supported ();</pre>
540
- <p>
541
- This function returns <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if the thread system is initialized, and
542
- <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> if it is not.
543
- </p>
544
- <p>
545
- </p>
546
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
547
- <h3 class="title">Note</h3>
548
- <p>This function is actually a macro. Apart from taking the
549
- address of it you can however use it as if it was a
550
- function.</p>
551
- </div>
552
- <p>
553
- </p>
554
- <div class="variablelist"><table border="0">
555
- <col align="left" valign="top">
556
- <tbody><tr>
557
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
558
- <td>
559
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if the thread system is initialized.
560
- </td>
561
- </tr></tbody>
562
- </table></div>
563
- </div>
564
- <hr>
565
- <div class="refsect2">
566
- <a name="g-thread-get-initialized"></a><h3>g_thread_get_initialized ()</h3>
567
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_thread_get_initialized (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
568
- <p>
569
- Indicates if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has been called.
570
- </p>
571
- <div class="variablelist"><table border="0">
572
- <col align="left" valign="top">
573
- <tbody><tr>
574
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
575
- <td> <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if threads have been initialized.
576
-
577
- </td>
578
- </tr></tbody>
579
- </table></div>
580
- <p class="since">Since 2.20</p>
581
- </div>
582
- <hr>
583
- <div class="refsect2">
584
- <a name="GThreadFunc"></a><h3>GThreadFunc ()</h3>
585
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> (*GThreadFunc) (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
586
- <p>
587
- Specifies the type of the <em class="parameter"><code>func</code></em> functions passed to
588
- <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()"><code class="function">g_thread_create()</code></a> or <a class="link" href="glib-Threads.html#g-thread-create-full" title="g_thread_create_full ()"><code class="function">g_thread_create_full()</code></a>.
589
- </p>
590
- <div class="variablelist"><table border="0">
591
- <col align="left" valign="top">
592
- <tbody>
593
- <tr>
594
- <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
595
- <td>data passed to the thread.
596
- </td>
597
- </tr>
598
- <tr>
599
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
600
- <td>the return value of the thread, which will be returned by
601
- <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()"><code class="function">g_thread_join()</code></a>.
602
- </td>
603
- </tr>
604
- </tbody>
605
- </table></div>
606
- </div>
607
- <hr>
608
- <div class="refsect2">
609
- <a name="GThreadPriority"></a><h3>enum GThreadPriority</h3>
610
- <pre class="programlisting">typedef enum
611
- {
612
- G_THREAD_PRIORITY_LOW,
613
- G_THREAD_PRIORITY_NORMAL,
614
- G_THREAD_PRIORITY_HIGH,
615
- G_THREAD_PRIORITY_URGENT
616
- } GThreadPriority;
617
- </pre>
618
- <p>
619
- Specifies the priority of a thread.
620
- </p>
621
- <p>
622
- </p>
623
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
624
- <h3 class="title">Note</h3>
625
- <p>It is not guaranteed that threads with different priorities
626
- really behave accordingly. On some systems (e.g. Linux) there are no
627
- thread priorities. On other systems (e.g. Solaris) there doesn't
628
- seem to be different scheduling for different priorities. All in all
629
- try to avoid being dependent on priorities.</p>
630
- </div>
631
- <p>
632
- </p>
633
- <div class="variablelist"><table border="0">
634
- <col align="left" valign="top">
635
- <tbody>
636
- <tr>
637
- <td><p><a name="G-THREAD-PRIORITY-LOW:CAPS"></a><span class="term"><code class="literal">G_THREAD_PRIORITY_LOW</code></span></p></td>
638
- <td>a priority lower than normal
639
- </td>
640
- </tr>
641
- <tr>
642
- <td><p><a name="G-THREAD-PRIORITY-NORMAL:CAPS"></a><span class="term"><code class="literal">G_THREAD_PRIORITY_NORMAL</code></span></p></td>
643
- <td>the default priority
644
- </td>
645
- </tr>
646
- <tr>
647
- <td><p><a name="G-THREAD-PRIORITY-HIGH:CAPS"></a><span class="term"><code class="literal">G_THREAD_PRIORITY_HIGH</code></span></p></td>
648
- <td>a priority higher than normal
649
- </td>
650
- </tr>
651
- <tr>
652
- <td><p><a name="G-THREAD-PRIORITY-URGENT:CAPS"></a><span class="term"><code class="literal">G_THREAD_PRIORITY_URGENT</code></span></p></td>
653
- <td>the highest priority
654
- </td>
655
- </tr>
656
- </tbody>
657
- </table></div>
658
- </div>
659
- <hr>
660
- <div class="refsect2">
661
- <a name="GThread"></a><h3>GThread</h3>
662
- <pre class="programlisting">typedef struct {
663
- } GThread;
664
- </pre>
665
- <p>
666
- The <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> struct represents a running thread. It has three public
667
- read-only members, but the underlying struct is bigger, so you must
668
- not copy this struct.
669
- </p>
670
- <p>
671
- </p>
672
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
673
- <h3 class="title">Note</h3>
674
- <p>Resources for a joinable thread are not fully released
675
- until <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()"><code class="function">g_thread_join()</code></a> is called for that thread.</p>
676
- </div>
677
- <p>
678
- </p>
679
- </div>
680
- <hr>
681
- <div class="refsect2">
682
- <a name="g-thread-create"></a><h3>g_thread_create ()</h3>
683
- <pre class="programlisting"><a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="returnvalue">GThread</span></a> * g_thread_create (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadFunc" title="GThreadFunc ()"><span class="type">GThreadFunc</span></a> func</code></em>,
684
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
685
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="type">gboolean</span></a> joinable</code></em>,
686
- <em class="parameter"><code><a class="link" href="glib-Error-Reporting.html#GError" title="GError"><span class="type">GError</span></a> **error</code></em>);</pre>
687
- <p>
688
- This function creates a new thread with the default priority.
689
- </p>
690
- <p>
691
- If <em class="parameter"><code>joinable</code></em> is <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, you can wait for this threads termination
692
- calling <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()"><code class="function">g_thread_join()</code></a>. Otherwise the thread will just disappear
693
- when it terminates.
694
- </p>
695
- <p>
696
- The new thread executes the function <em class="parameter"><code>func</code></em> with the argument <em class="parameter"><code>data</code></em>.
697
- If the thread was created successfully, it is returned.
698
- </p>
699
- <p>
700
- <em class="parameter"><code>error</code></em> can be <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> to ignore errors, or non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> to report errors.
701
- The error is set, if and only if the function returns <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>.
702
- </p>
703
- <div class="variablelist"><table border="0">
704
- <col align="left" valign="top">
705
- <tbody>
706
- <tr>
707
- <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
708
- <td>a function to execute in the new thread.
709
- </td>
710
- </tr>
711
- <tr>
712
- <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
713
- <td>an argument to supply to the new thread.
714
- </td>
715
- </tr>
716
- <tr>
717
- <td><p><span class="term"><em class="parameter"><code>joinable</code></em> :</span></p></td>
718
- <td>should this thread be joinable?
719
- </td>
720
- </tr>
721
- <tr>
722
- <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
723
- <td>return location for error.
724
- </td>
725
- </tr>
726
- <tr>
727
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
728
- <td>the new <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> on success.
729
- </td>
730
- </tr>
731
- </tbody>
732
- </table></div>
733
- </div>
734
- <hr>
735
- <div class="refsect2">
736
- <a name="g-thread-create-full"></a><h3>g_thread_create_full ()</h3>
737
- <pre class="programlisting"><a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="returnvalue">GThread</span></a> * g_thread_create_full (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadFunc" title="GThreadFunc ()"><span class="type">GThreadFunc</span></a> func</code></em>,
738
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
739
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gulong" title="gulong"><span class="type">gulong</span></a> stack_size</code></em>,
740
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="type">gboolean</span></a> joinable</code></em>,
741
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="type">gboolean</span></a> bound</code></em>,
742
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadPriority" title="enum GThreadPriority"><span class="type">GThreadPriority</span></a> priority</code></em>,
743
- <em class="parameter"><code><a class="link" href="glib-Error-Reporting.html#GError" title="GError"><span class="type">GError</span></a> **error</code></em>);</pre>
744
- <p>
745
- This function creates a new thread with the priority <em class="parameter"><code>priority</code></em>. If
746
- the underlying thread implementation supports it, the thread gets a
747
- stack size of <em class="parameter"><code>stack_size</code></em> or the default value for the current
748
- platform, if <em class="parameter"><code>stack_size</code></em> is 0.
749
- </p>
750
- <p>
751
- If <em class="parameter"><code>joinable</code></em> is <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, you can wait for this threads termination
752
- calling <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()"><code class="function">g_thread_join()</code></a>. Otherwise the thread will just disappear
753
- when it terminates. If <em class="parameter"><code>bound</code></em> is <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, this thread will be
754
- scheduled in the system scope, otherwise the implementation is free
755
- to do scheduling in the process scope. The first variant is more
756
- expensive resource-wise, but generally faster. On some systems (e.g.
757
- Linux) all threads are bound.
758
- </p>
759
- <p>
760
- The new thread executes the function <em class="parameter"><code>func</code></em> with the argument <em class="parameter"><code>data</code></em>.
761
- If the thread was created successfully, it is returned.
762
- </p>
763
- <p>
764
- <em class="parameter"><code>error</code></em> can be <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> to ignore errors, or non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> to report errors.
765
- The error is set, if and only if the function returns <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>.
766
- </p>
767
- <p>
768
- </p>
769
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
770
- <h3 class="title">Note</h3>
771
- <p>It is not guaranteed that threads with different priorities
772
- really behave accordingly. On some systems (e.g. Linux) there are no
773
- thread priorities. On other systems (e.g. Solaris) there doesn't
774
- seem to be different scheduling for different priorities. All in all
775
- try to avoid being dependent on priorities. Use
776
- <a class="link" href="glib-Threads.html#G-THREAD-PRIORITY-NORMAL:CAPS"><code class="literal">G_THREAD_PRIORITY_NORMAL</code></a> here as a default.</p>
777
- </div>
778
- <p>
779
- </p>
780
- <p>
781
- </p>
782
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
783
- <h3 class="title">Note</h3>
784
- <p>Only use <a class="link" href="glib-Threads.html#g-thread-create-full" title="g_thread_create_full ()"><code class="function">g_thread_create_full()</code></a> if you really can't use
785
- <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()"><code class="function">g_thread_create()</code></a> instead. <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()"><code class="function">g_thread_create()</code></a> does not take
786
- <em class="parameter"><code>stack_size</code></em>, <em class="parameter"><code>bound</code></em>, and <em class="parameter"><code>priority</code></em> as arguments, as they should only
787
- be used in cases in which it is unavoidable.</p>
788
- </div>
789
- <p>
790
- </p>
791
- <div class="variablelist"><table border="0">
792
- <col align="left" valign="top">
793
- <tbody>
794
- <tr>
795
- <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
796
- <td>a function to execute in the new thread.
797
- </td>
798
- </tr>
799
- <tr>
800
- <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
801
- <td>an argument to supply to the new thread.
802
- </td>
803
- </tr>
804
- <tr>
805
- <td><p><span class="term"><em class="parameter"><code>stack_size</code></em> :</span></p></td>
806
- <td>a stack size for the new thread.
807
- </td>
808
- </tr>
809
- <tr>
810
- <td><p><span class="term"><em class="parameter"><code>joinable</code></em> :</span></p></td>
811
- <td>should this thread be joinable?
812
- </td>
813
- </tr>
814
- <tr>
815
- <td><p><span class="term"><em class="parameter"><code>bound</code></em> :</span></p></td>
816
- <td>should this thread be bound to a system thread?
817
- </td>
818
- </tr>
819
- <tr>
820
- <td><p><span class="term"><em class="parameter"><code>priority</code></em> :</span></p></td>
821
- <td>a priority for the thread.
822
- </td>
823
- </tr>
824
- <tr>
825
- <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
826
- <td>return location for error.
827
- </td>
828
- </tr>
829
- <tr>
830
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
831
- <td>the new <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> on success.
832
- </td>
833
- </tr>
834
- </tbody>
835
- </table></div>
836
- </div>
837
- <hr>
838
- <div class="refsect2">
839
- <a name="g-thread-self"></a><h3>g_thread_self ()</h3>
840
- <pre class="programlisting"><a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="returnvalue">GThread</span></a> * g_thread_self (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
841
- <p>
842
- This functions returns the <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> corresponding to the calling
843
- thread.
844
- </p>
845
- <div class="variablelist"><table border="0">
846
- <col align="left" valign="top">
847
- <tbody><tr>
848
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
849
- <td>the current thread.
850
- </td>
851
- </tr></tbody>
852
- </table></div>
853
- </div>
854
- <hr>
855
- <div class="refsect2">
856
- <a name="g-thread-join"></a><h3>g_thread_join ()</h3>
857
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> g_thread_join (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> *thread</code></em>);</pre>
858
- <p>
859
- Waits until <em class="parameter"><code>thread</code></em> finishes, i.e. the function <em class="parameter"><code>func</code></em>, as given to
860
- <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()"><code class="function">g_thread_create()</code></a>, returns or <a class="link" href="glib-Threads.html#g-thread-exit" title="g_thread_exit ()"><code class="function">g_thread_exit()</code></a> is called by <em class="parameter"><code>thread</code></em>.
861
- All resources of <em class="parameter"><code>thread</code></em> including the <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> struct are released.
862
- <em class="parameter"><code>thread</code></em> must have been created with <em class="parameter"><code>joinable</code></em>=<a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> in
863
- <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()"><code class="function">g_thread_create()</code></a>. The value returned by <em class="parameter"><code>func</code></em> or given to
864
- <a class="link" href="glib-Threads.html#g-thread-exit" title="g_thread_exit ()"><code class="function">g_thread_exit()</code></a> by <em class="parameter"><code>thread</code></em> is returned by this function.
865
- </p>
866
- <div class="variablelist"><table border="0">
867
- <col align="left" valign="top">
868
- <tbody>
869
- <tr>
870
- <td><p><span class="term"><em class="parameter"><code>thread</code></em> :</span></p></td>
871
- <td>a <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> to be waited for.
872
- </td>
873
- </tr>
874
- <tr>
875
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
876
- <td>the return value of the thread.
877
- </td>
878
- </tr>
879
- </tbody>
880
- </table></div>
881
- </div>
882
- <hr>
883
- <div class="refsect2">
884
- <a name="g-thread-set-priority"></a><h3>g_thread_set_priority ()</h3>
885
- <pre class="programlisting"><span class="returnvalue">void</span> g_thread_set_priority (<em class="parameter"><code><a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> *thread</code></em>,
886
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GThreadPriority" title="enum GThreadPriority"><span class="type">GThreadPriority</span></a> priority</code></em>);</pre>
887
- <p>
888
- Changes the priority of <em class="parameter"><code>thread</code></em> to <em class="parameter"><code>priority</code></em>.
889
- </p>
890
- <p>
891
- </p>
892
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
893
- <h3 class="title">Note</h3>
894
- <p>It is not guaranteed that threads with different
895
- priorities really behave accordingly. On some systems (e.g. Linux)
896
- there are no thread priorities. On other systems (e.g. Solaris) there
897
- doesn't seem to be different scheduling for different priorities. All
898
- in all try to avoid being dependent on priorities.</p>
899
- </div>
900
- <p>
901
- </p>
902
- <div class="variablelist"><table border="0">
903
- <col align="left" valign="top">
904
- <tbody>
905
- <tr>
906
- <td><p><span class="term"><em class="parameter"><code>thread</code></em> :</span></p></td>
907
- <td>a <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a>.
908
- </td>
909
- </tr>
910
- <tr>
911
- <td><p><span class="term"><em class="parameter"><code>priority</code></em> :</span></p></td>
912
- <td>a new priority for <em class="parameter"><code>thread</code></em>.
913
- </td>
914
- </tr>
915
- </tbody>
916
- </table></div>
917
- </div>
918
- <hr>
919
- <div class="refsect2">
920
- <a name="g-thread-yield"></a><h3>g_thread_yield ()</h3>
921
- <pre class="programlisting"><span class="returnvalue">void</span> g_thread_yield ();</pre>
922
- <p>
923
- Gives way to other threads waiting to be scheduled.
924
- </p>
925
- <p>
926
- This function is often used as a method to make busy wait less evil.
927
- But in most cases you will encounter, there are better methods to do
928
- that. So in general you shouldn't use this function.
929
- </p>
930
- </div>
931
- <hr>
932
- <div class="refsect2">
933
- <a name="g-thread-exit"></a><h3>g_thread_exit ()</h3>
934
- <pre class="programlisting"><span class="returnvalue">void</span> g_thread_exit (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> retval</code></em>);</pre>
935
- <p>
936
- Exits the current thread. If another thread is waiting for that
937
- thread using <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()"><code class="function">g_thread_join()</code></a> and the current thread is joinable, the
938
- waiting thread will be woken up and get <em class="parameter"><code>retval</code></em> as the return value
939
- of <a class="link" href="glib-Threads.html#g-thread-join" title="g_thread_join ()"><code class="function">g_thread_join()</code></a>. If the current thread is not joinable, <em class="parameter"><code>retval</code></em>
940
- is ignored. Calling
941
- </p>
942
- <p>
943
- </p>
944
- <div class="informalexample">
945
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
946
- <tbody>
947
- <tr>
948
- <td class="listing_lines" align="right"><pre>1</pre></td>
949
- <td class="listing_code"><pre class="programlisting"><span class="function"><a href="glib-Threads.html#g-thread-exit">g_thread_exit</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">retval</span><span class="symbol">);</span></pre></td>
950
- </tr>
951
- </tbody>
952
- </table>
953
- </div>
954
-
955
- <p>
956
- </p>
957
- <p>
958
- is equivalent to returning <em class="parameter"><code>retval</code></em> from the function <em class="parameter"><code>func</code></em>, as given
959
- to <a class="link" href="glib-Threads.html#g-thread-create" title="g_thread_create ()"><code class="function">g_thread_create()</code></a>.
960
- </p>
961
- <p>
962
- </p>
963
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
964
- <h3 class="title">Note</h3>
965
- <p>Never call <a class="link" href="glib-Threads.html#g-thread-exit" title="g_thread_exit ()"><code class="function">g_thread_exit()</code></a> from within a thread of a
966
- <a class="link" href="glib-Thread-Pools.html#GThreadPool" title="GThreadPool"><span class="type">GThreadPool</span></a>, as that will mess up the bookkeeping and lead to funny
967
- and unwanted results.</p>
968
- </div>
969
- <p>
970
- </p>
971
- <div class="variablelist"><table border="0">
972
- <col align="left" valign="top">
973
- <tbody><tr>
974
- <td><p><span class="term"><em class="parameter"><code>retval</code></em> :</span></p></td>
975
- <td>the return value of this thread.
976
- </td>
977
- </tr></tbody>
978
- </table></div>
979
- </div>
980
- <hr>
981
- <div class="refsect2">
982
- <a name="g-thread-foreach"></a><h3>g_thread_foreach ()</h3>
983
- <pre class="programlisting"><span class="returnvalue">void</span> g_thread_foreach (<em class="parameter"><code><a class="link" href="glib-Doubly-Linked-Lists.html#GFunc" title="GFunc ()"><span class="type">GFunc</span></a> thread_func</code></em>,
984
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
985
- <p>
986
- Call <em class="parameter"><code>thread_func</code></em> on all existing <a class="link" href="glib-Threads.html#GThread" title="GThread"><span class="type">GThread</span></a> structures. Note that
987
- threads may decide to exit while <em class="parameter"><code>thread_func</code></em> is running, so
988
- without intimate knowledge about the lifetime of foreign threads,
989
- <em class="parameter"><code>thread_func</code></em> shouldn't access the GThread* pointer passed in as
990
- first argument. However, <em class="parameter"><code>thread_func</code></em> will not be called for threads
991
- which are known to have exited already.
992
- </p>
993
- <p>
994
- Due to thread lifetime checks, this function has an execution complexity
995
- which is quadratic in the number of existing threads.
996
- </p>
997
- <div class="variablelist"><table border="0">
998
- <col align="left" valign="top">
999
- <tbody>
1000
- <tr>
1001
- <td><p><span class="term"><em class="parameter"><code>thread_func</code></em> :</span></p></td>
1002
- <td>function to call for all GThread structures
1003
- </td>
1004
- </tr>
1005
- <tr>
1006
- <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1007
- <td>second argument to <em class="parameter"><code>thread_func</code></em>
1008
- </td>
1009
- </tr>
1010
- </tbody>
1011
- </table></div>
1012
- <p class="since">Since 2.10</p>
1013
- </div>
1014
- <hr>
1015
- <div class="refsect2">
1016
- <a name="GMutex"></a><h3>GMutex</h3>
1017
- <pre class="programlisting">typedef struct _GMutex GMutex;</pre>
1018
- <p>
1019
- The <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> struct is an opaque data structure to represent a mutex
1020
- (mutual exclusion). It can be used to protect data against shared
1021
- access. Take for example the following function:
1022
- </p>
1023
- <p>
1024
- </p>
1025
- <div class="example">
1026
- <a name="id626773"></a><p class="title"><b>Example 2. A function which will not work in a threaded environment</b></p>
1027
- <div class="example-contents">
1028
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1029
- <tbody>
1030
- <tr>
1031
- <td class="listing_lines" align="right"><pre>1
1032
- 2
1033
- 3
1034
- 4
1035
- 5
1036
- 6
1037
- 7
1038
- 8
1039
- 9
1040
- 10
1041
- 11
1042
- 12</pre></td>
1043
- <td class="listing_code"><pre class="programlisting"><span class="type">int</span>
1044
- <span class="function">give_me_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
1045
- <span class="cbracket">{</span>
1046
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="type">int</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
1047
-
1048
- <span class="normal"> </span><span class="comment">/* now do a very complicated calculation to calculate the new</span>
1049
- <span class="comment"> * number, this might for example be a random number generator</span>
1050
- <span class="comment"> */</span>
1051
- <span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function">calc_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1052
-
1053
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> current_number</span><span class="symbol">;</span>
1054
- <span class="cbracket">}</span></pre></td>
1055
- </tr>
1056
- </tbody>
1057
- </table>
1058
- </div>
1059
-
1060
- </div>
1061
- <p><br class="example-break">
1062
- </p>
1063
- <p>
1064
- It is easy to see that this won't work in a multi-threaded
1065
- application. There current_number must be protected against shared
1066
- access. A first naive implementation would be:
1067
- </p>
1068
- <p>
1069
- </p>
1070
- <div class="example">
1071
- <a name="id626805"></a><p class="title"><b>Example 3. The wrong way to write a thread-safe function</b></p>
1072
- <div class="example-contents">
1073
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1074
- <tbody>
1075
- <tr>
1076
- <td class="listing_lines" align="right"><pre>1
1077
- 2
1078
- 3
1079
- 4
1080
- 5
1081
- 6
1082
- 7
1083
- 8
1084
- 9
1085
- 10
1086
- 11
1087
- 12
1088
- 13
1089
- 14
1090
- 15</pre></td>
1091
- <td class="listing_code"><pre class="programlisting"><span class="type">int</span>
1092
- <span class="function">give_me_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
1093
- <span class="cbracket">{</span>
1094
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="type">int</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
1095
- <span class="normal"> </span><span class="type">int</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1096
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> <a href="glib-Threads.html#GMutex">GMutex</a> </span><span class="symbol">*</span><span class="normal"> mutex </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
1097
-
1098
- <span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">mutex</span><span class="symbol">)</span><span class="normal"> mutex </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-new">g_mutex_new</a></span><span class="normal"> </span><span class="symbol">();</span>
1099
-
1100
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-lock">g_mutex_lock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">mutex</span><span class="symbol">);</span>
1101
- <span class="normal"> ret_val </span><span class="symbol">=</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function">calc_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1102
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-unlock">g_mutex_unlock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">mutex</span><span class="symbol">);</span>
1103
-
1104
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1105
- <span class="cbracket">}</span></pre></td>
1106
- </tr>
1107
- </tbody>
1108
- </table>
1109
- </div>
1110
-
1111
- </div>
1112
- <p><br class="example-break">
1113
- </p>
1114
- <p>
1115
- This looks like it would work, but there is a race condition while
1116
- constructing the mutex and this code cannot work reliable. Please do
1117
- not use such constructs in your own programs! One working solution
1118
- is:
1119
- </p>
1120
- <p>
1121
- </p>
1122
- <div class="example">
1123
- <a name="id626834"></a><p class="title"><b>Example 4. A correct thread-safe function</b></p>
1124
- <div class="example-contents">
1125
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1126
- <tbody>
1127
- <tr>
1128
- <td class="listing_lines" align="right"><pre>1
1129
- 2
1130
- 3
1131
- 4
1132
- 5
1133
- 6
1134
- 7
1135
- 8
1136
- 9
1137
- 10
1138
- 11
1139
- 12
1140
- 13
1141
- 14
1142
- 15
1143
- 16
1144
- 17
1145
- 18
1146
- 19
1147
- 20
1148
- 21
1149
- 22
1150
- 23
1151
- 24
1152
- 25
1153
- 26</pre></td>
1154
- <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="usertype">GMutex</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">give_me_next_number_mutex </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
1155
-
1156
- <span class="comment">/* this function must be called before any call to</span>
1157
- <span class="comment"> * give_me_next_number()</span>
1158
- <span class="comment"> *</span>
1159
- <span class="comment"> * it must be called exactly once.</span>
1160
- <span class="comment"> */</span>
1161
- <span class="type">void</span>
1162
- <span class="function">init_give_me_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
1163
- <span class="cbracket">{</span>
1164
- <span class="normal"> </span><span class="function"><a href="glib-Testing.html#g-assert">g_assert</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">give_me_next_number_mutex </span><span class="symbol">==</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
1165
- <span class="normal"> give_me_next_number_mutex </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-new">g_mutex_new</a></span><span class="normal"> </span><span class="symbol">();</span>
1166
- <span class="cbracket">}</span>
1167
-
1168
- <span class="type">int</span>
1169
- <span class="function">give_me_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
1170
- <span class="cbracket">{</span>
1171
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="type">int</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
1172
- <span class="normal"> </span><span class="type">int</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1173
-
1174
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-lock">g_mutex_lock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">give_me_next_number_mutex</span><span class="symbol">);</span>
1175
- <span class="normal"> ret_val </span><span class="symbol">=</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function">calc_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1176
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-unlock">g_mutex_unlock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">give_me_next_number_mutex</span><span class="symbol">);</span>
1177
-
1178
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1179
- <span class="cbracket">}</span></pre></td>
1180
- </tr>
1181
- </tbody>
1182
- </table>
1183
- </div>
1184
-
1185
- </div>
1186
- <p><br class="example-break">
1187
- </p>
1188
- <p>
1189
- <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> provides a simpler and safer way of doing this.
1190
- </p>
1191
- <p>
1192
- If you want to use a mutex, and your code should also work without
1193
- calling <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> first, then you can not use a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>, as
1194
- <a class="link" href="glib-Threads.html#g-mutex-new" title="g_mutex_new ()"><code class="function">g_mutex_new()</code></a> requires that the thread system be initialized. Use a
1195
- <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> instead.
1196
- </p>
1197
- <p>
1198
- A <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> should only be accessed via the following functions.
1199
- </p>
1200
- <p>
1201
- </p>
1202
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1203
- <h3 class="title">Note</h3>
1204
- <p>All of the <code class="function">g_mutex_*</code> functions are
1205
- actually macros. Apart from taking their addresses, you can however
1206
- use them as if they were functions.</p>
1207
- </div>
1208
- <p>
1209
- </p>
1210
- </div>
1211
- <hr>
1212
- <div class="refsect2">
1213
- <a name="g-mutex-new"></a><h3>g_mutex_new ()</h3>
1214
- <pre class="programlisting"><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="returnvalue">GMutex</span></a> * g_mutex_new ();</pre>
1215
- <p>
1216
- Creates a new <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>.
1217
- </p>
1218
- <p>
1219
- </p>
1220
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1221
- <h3 class="title">Note</h3>
1222
- <p>This function will abort if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not been
1223
- called yet.</p>
1224
- </div>
1225
- <p>
1226
- </p>
1227
- <div class="variablelist"><table border="0">
1228
- <col align="left" valign="top">
1229
- <tbody><tr>
1230
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1231
- <td>a new <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>.
1232
- </td>
1233
- </tr></tbody>
1234
- </table></div>
1235
- </div>
1236
- <hr>
1237
- <div class="refsect2">
1238
- <a name="g-mutex-lock"></a><h3>g_mutex_lock ()</h3>
1239
- <pre class="programlisting"><span class="returnvalue">void</span> g_mutex_lock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);</pre>
1240
- <p>
1241
- Locks <em class="parameter"><code>mutex</code></em>. If <em class="parameter"><code>mutex</code></em> is already locked by another thread, the
1242
- current thread will block until <em class="parameter"><code>mutex</code></em> is unlocked by the other
1243
- thread.
1244
- </p>
1245
- <p>
1246
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
1247
- called, and, in that case, will do nothing.
1248
- </p>
1249
- <p>
1250
- </p>
1251
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1252
- <h3 class="title">Note</h3>
1253
- <p><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> is neither guaranteed to be recursive nor to be
1254
- non-recursive, i.e. a thread could deadlock while calling
1255
- <a class="link" href="glib-Threads.html#g-mutex-lock" title="g_mutex_lock ()"><code class="function">g_mutex_lock()</code></a>, if it already has locked <em class="parameter"><code>mutex</code></em>. Use
1256
- <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a>, if you need recursive mutexes.</p>
1257
- </div>
1258
- <p>
1259
- </p>
1260
- <div class="variablelist"><table border="0">
1261
- <col align="left" valign="top">
1262
- <tbody><tr>
1263
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1264
- <td>a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>.
1265
- </td>
1266
- </tr></tbody>
1267
- </table></div>
1268
- </div>
1269
- <hr>
1270
- <div class="refsect2">
1271
- <a name="g-mutex-trylock"></a><h3>g_mutex_trylock ()</h3>
1272
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_mutex_trylock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);</pre>
1273
- <p>
1274
- Tries to lock <em class="parameter"><code>mutex</code></em>. If <em class="parameter"><code>mutex</code></em> is already locked by another thread,
1275
- it immediately returns <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a>. Otherwise it locks <em class="parameter"><code>mutex</code></em> and returns
1276
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>.
1277
- </p>
1278
- <p>
1279
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
1280
- called, and, in that case, will immediately return <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>.
1281
- </p>
1282
- <p>
1283
- </p>
1284
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1285
- <h3 class="title">Note</h3>
1286
- <p><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> is neither guaranteed to be recursive nor to be
1287
- non-recursive, i.e. the return value of <a class="link" href="glib-Threads.html#g-mutex-trylock" title="g_mutex_trylock ()"><code class="function">g_mutex_trylock()</code></a> could be
1288
- both <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> or <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if the current thread already has locked
1289
- <em class="parameter"><code>mutex</code></em>. Use <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a>, if you need recursive
1290
- mutexes.</p>
1291
- </div>
1292
- <p>
1293
- </p>
1294
- <div class="variablelist"><table border="0">
1295
- <col align="left" valign="top">
1296
- <tbody>
1297
- <tr>
1298
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1299
- <td>a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>.
1300
- </td>
1301
- </tr>
1302
- <tr>
1303
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1304
- <td>
1305
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if <em class="parameter"><code>mutex</code></em> could be locked.
1306
- </td>
1307
- </tr>
1308
- </tbody>
1309
- </table></div>
1310
- </div>
1311
- <hr>
1312
- <div class="refsect2">
1313
- <a name="g-mutex-unlock"></a><h3>g_mutex_unlock ()</h3>
1314
- <pre class="programlisting"><span class="returnvalue">void</span> g_mutex_unlock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);</pre>
1315
- <p>
1316
- Unlocks <em class="parameter"><code>mutex</code></em>. If another thread is blocked in a <a class="link" href="glib-Threads.html#g-mutex-lock" title="g_mutex_lock ()"><code class="function">g_mutex_lock()</code></a>
1317
- call for <em class="parameter"><code>mutex</code></em>, it will be woken and can lock <em class="parameter"><code>mutex</code></em> itself.
1318
- </p>
1319
- <p>
1320
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
1321
- called, and, in that case, will do nothing.
1322
- </p>
1323
- <div class="variablelist"><table border="0">
1324
- <col align="left" valign="top">
1325
- <tbody><tr>
1326
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1327
- <td>a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>.
1328
- </td>
1329
- </tr></tbody>
1330
- </table></div>
1331
- </div>
1332
- <hr>
1333
- <div class="refsect2">
1334
- <a name="g-mutex-free"></a><h3>g_mutex_free ()</h3>
1335
- <pre class="programlisting"><span class="returnvalue">void</span> g_mutex_free (<em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);</pre>
1336
- <p>
1337
- Destroys <em class="parameter"><code>mutex</code></em>.
1338
- </p>
1339
- <p>
1340
- </p>
1341
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1342
- <h3 class="title">Note</h3>
1343
- <p>Calling <a class="link" href="glib-Threads.html#g-mutex-free" title="g_mutex_free ()"><code class="function">g_mutex_free()</code></a> on a locked mutex may result in
1344
- undefined behaviour.</p>
1345
- </div>
1346
- <p>
1347
- </p>
1348
- <div class="variablelist"><table border="0">
1349
- <col align="left" valign="top">
1350
- <tbody><tr>
1351
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1352
- <td>a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>.
1353
- </td>
1354
- </tr></tbody>
1355
- </table></div>
1356
- </div>
1357
- <hr>
1358
- <div class="refsect2">
1359
- <a name="GStaticMutex"></a><h3>GStaticMutex</h3>
1360
- <pre class="programlisting">typedef struct _GStaticMutex GStaticMutex;</pre>
1361
- <p>
1362
- A <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> works like a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>, but it has one significant
1363
- advantage. It doesn't need to be created at run-time like a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>,
1364
- but can be defined at compile-time. Here is a shorter, easier and
1365
- safer version of our <code class="function"><code class="function">give_me_next_number()</code></code>
1366
- example:
1367
- </p>
1368
- <p>
1369
- </p>
1370
- <div class="example">
1371
- <a name="id627744"></a><p class="title"><b>Example 5. 
1372
- Using <span class="structname">GStaticMutex</span>
1373
- to simplify thread-safe programming
1374
- </b></p>
1375
- <div class="example-contents">
1376
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1377
- <tbody>
1378
- <tr>
1379
- <td class="listing_lines" align="right"><pre>1
1380
- 2
1381
- 3
1382
- 4
1383
- 5
1384
- 6
1385
- 7
1386
- 8
1387
- 9
1388
- 10
1389
- 11
1390
- 12
1391
- 13</pre></td>
1392
- <td class="listing_code"><pre class="programlisting"><span class="type">int</span>
1393
- <span class="function">give_me_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
1394
- <span class="cbracket">{</span>
1395
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="type">int</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
1396
- <span class="normal"> </span><span class="type">int</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1397
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="usertype">GStaticMutex</span><span class="normal"> mutex </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-STATIC-MUTEX-INIT:CAPS">G_STATIC_MUTEX_INIT</a></span><span class="symbol">;</span>
1398
-
1399
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-mutex-lock">g_static_mutex_lock</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">mutex</span><span class="symbol">);</span>
1400
- <span class="normal"> ret_val </span><span class="symbol">=</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function">calc_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1401
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-mutex-unlock">g_static_mutex_unlock</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">mutex</span><span class="symbol">);</span>
1402
-
1403
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1404
- <span class="cbracket">}</span></pre></td>
1405
- </tr>
1406
- </tbody>
1407
- </table>
1408
- </div>
1409
-
1410
- </div>
1411
- <p><br class="example-break">
1412
- </p>
1413
- <p>
1414
- Sometimes you would like to dynamically create a mutex. If you don't
1415
- want to require prior calling to <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>, because your code
1416
- should also be usable in non-threaded programs, you are not able to
1417
- use <a class="link" href="glib-Threads.html#g-mutex-new" title="g_mutex_new ()"><code class="function">g_mutex_new()</code></a> and thus <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>, as that requires a prior call to
1418
- <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>. In theses cases you can also use a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1419
- It must be initialized with <a class="link" href="glib-Threads.html#g-static-mutex-init" title="g_static_mutex_init ()"><code class="function">g_static_mutex_init()</code></a> before using it
1420
- and freed with with <a class="link" href="glib-Threads.html#g-static-mutex-free" title="g_static_mutex_free ()"><code class="function">g_static_mutex_free()</code></a> when not needed anymore to
1421
- free up any allocated resources.
1422
- </p>
1423
- <p>
1424
- Even though <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> is not opaque, it should only be used with
1425
- the following functions, as it is defined differently on different
1426
- platforms.
1427
- </p>
1428
- <p>
1429
- All of the <code class="function">g_static_mutex_*</code> functions apart
1430
- from <code class="function">g_static_mutex_get_mutex</code> can also be used
1431
- even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been called. Then they do
1432
- nothing, apart from <code class="function">g_static_mutex_trylock</code>,
1433
- which does nothing but returning <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>.
1434
- </p>
1435
- <p>
1436
- </p>
1437
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1438
- <h3 class="title">Note</h3>
1439
- <p>All of the <code class="function">g_static_mutex_*</code>
1440
- functions are actually macros. Apart from taking their addresses, you
1441
- can however use them as if they were functions.</p>
1442
- </div>
1443
- <p>
1444
- </p>
1445
- </div>
1446
- <hr>
1447
- <div class="refsect2">
1448
- <a name="G-STATIC-MUTEX-INIT:CAPS"></a><h3>G_STATIC_MUTEX_INIT</h3>
1449
- <pre class="programlisting">#define G_STATIC_MUTEX_INIT
1450
- </pre>
1451
- <p>
1452
- A <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> must be initialized with this macro, before it can
1453
- be used. This macro can used be to initialize a variable, but it
1454
- cannot be assigned to a variable. In that case you have to use
1455
- <a class="link" href="glib-Threads.html#g-static-mutex-init" title="g_static_mutex_init ()"><code class="function">g_static_mutex_init()</code></a>.
1456
- </p>
1457
- <p>
1458
- </p>
1459
- <div class="informalexample">
1460
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1461
- <tbody>
1462
- <tr>
1463
- <td class="listing_lines" align="right"><pre>1</pre></td>
1464
- <td class="listing_code"><pre class="programlisting"><span class="usertype">GStaticMutex</span><span class="normal"> my_mutex </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-STATIC-MUTEX-INIT:CAPS">G_STATIC_MUTEX_INIT</a></span><span class="symbol">;</span></pre></td>
1465
- </tr>
1466
- </tbody>
1467
- </table>
1468
- </div>
1469
-
1470
- <p>
1471
- </p>
1472
- </div>
1473
- <hr>
1474
- <div class="refsect2">
1475
- <a name="g-static-mutex-init"></a><h3>g_static_mutex_init ()</h3>
1476
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_mutex_init (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);</pre>
1477
- <p>
1478
- Initializes <em class="parameter"><code>mutex</code></em>. Alternatively you can initialize it with
1479
- <a class="link" href="glib-Threads.html#G-STATIC-MUTEX-INIT:CAPS" title="G_STATIC_MUTEX_INIT"><span class="type">G_STATIC_MUTEX_INIT</span></a>.
1480
- </p>
1481
- <div class="variablelist"><table border="0">
1482
- <col align="left" valign="top">
1483
- <tbody><tr>
1484
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1485
- <td>a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> to be initialized.
1486
- </td>
1487
- </tr></tbody>
1488
- </table></div>
1489
- </div>
1490
- <hr>
1491
- <div class="refsect2">
1492
- <a name="g-static-mutex-lock"></a><h3>g_static_mutex_lock ()</h3>
1493
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_mutex_lock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);</pre>
1494
- <p>
1495
- Works like <a class="link" href="glib-Threads.html#g-mutex-lock" title="g_mutex_lock ()"><code class="function">g_mutex_lock()</code></a>, but for a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1496
- </p>
1497
- <div class="variablelist"><table border="0">
1498
- <col align="left" valign="top">
1499
- <tbody><tr>
1500
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1501
- <td>a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1502
- </td>
1503
- </tr></tbody>
1504
- </table></div>
1505
- </div>
1506
- <hr>
1507
- <div class="refsect2">
1508
- <a name="g-static-mutex-trylock"></a><h3>g_static_mutex_trylock ()</h3>
1509
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_static_mutex_trylock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);</pre>
1510
- <p>
1511
- Works like <a class="link" href="glib-Threads.html#g-mutex-trylock" title="g_mutex_trylock ()"><code class="function">g_mutex_trylock()</code></a>, but for a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1512
- </p>
1513
- <div class="variablelist"><table border="0">
1514
- <col align="left" valign="top">
1515
- <tbody>
1516
- <tr>
1517
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1518
- <td>a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1519
- </td>
1520
- </tr>
1521
- <tr>
1522
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1523
- <td>
1524
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if the <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> could be locked.
1525
- </td>
1526
- </tr>
1527
- </tbody>
1528
- </table></div>
1529
- </div>
1530
- <hr>
1531
- <div class="refsect2">
1532
- <a name="g-static-mutex-unlock"></a><h3>g_static_mutex_unlock ()</h3>
1533
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_mutex_unlock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);</pre>
1534
- <p>
1535
- Works like <a class="link" href="glib-Threads.html#g-mutex-unlock" title="g_mutex_unlock ()"><code class="function">g_mutex_unlock()</code></a>, but for a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1536
- </p>
1537
- <div class="variablelist"><table border="0">
1538
- <col align="left" valign="top">
1539
- <tbody><tr>
1540
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1541
- <td>a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1542
- </td>
1543
- </tr></tbody>
1544
- </table></div>
1545
- </div>
1546
- <hr>
1547
- <div class="refsect2">
1548
- <a name="g-static-mutex-get-mutex"></a><h3>g_static_mutex_get_mutex ()</h3>
1549
- <pre class="programlisting"><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="returnvalue">GMutex</span></a> * g_static_mutex_get_mutex (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);</pre>
1550
- <p>
1551
- For some operations (like <a class="link" href="glib-Threads.html#g-cond-wait" title="g_cond_wait ()"><code class="function">g_cond_wait()</code></a>) you must have a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>
1552
- instead of a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>. This function will return the
1553
- corresponding <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> for <em class="parameter"><code>mutex</code></em>.
1554
- </p>
1555
- <div class="variablelist"><table border="0">
1556
- <col align="left" valign="top">
1557
- <tbody>
1558
- <tr>
1559
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1560
- <td>a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1561
- </td>
1562
- </tr>
1563
- <tr>
1564
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1565
- <td>the <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> corresponding to <em class="parameter"><code>mutex</code></em>.
1566
- </td>
1567
- </tr>
1568
- </tbody>
1569
- </table></div>
1570
- </div>
1571
- <hr>
1572
- <div class="refsect2">
1573
- <a name="g-static-mutex-free"></a><h3>g_static_mutex_free ()</h3>
1574
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_mutex_free (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> *mutex</code></em>);</pre>
1575
- <p>
1576
- Releases all resources allocated to <em class="parameter"><code>mutex</code></em>.
1577
- </p>
1578
- <p>
1579
- You don't have to call this functions for a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> with an
1580
- unbounded lifetime, i.e. objects declared 'static', but if you have
1581
- a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> as a member of a structure and the structure is
1582
- freed, you should also free the <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.
1583
- </p>
1584
- <p>
1585
- </p>
1586
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1587
- <h3 class="title">Note</h3>
1588
- <p>Calling <a class="link" href="glib-Threads.html#g-static-mutex-free" title="g_static_mutex_free ()"><code class="function">g_static_mutex_free()</code></a> on a locked mutex may
1589
- result in undefined behaviour.</p>
1590
- </div>
1591
- <p>
1592
- </p>
1593
- <div class="variablelist"><table border="0">
1594
- <col align="left" valign="top">
1595
- <tbody><tr>
1596
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1597
- <td>a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a> to be freed.
1598
- </td>
1599
- </tr></tbody>
1600
- </table></div>
1601
- </div>
1602
- <hr>
1603
- <div class="refsect2">
1604
- <a name="G-LOCK-DEFINE:CAPS"></a><h3>G_LOCK_DEFINE()</h3>
1605
- <pre class="programlisting">#define G_LOCK_DEFINE(name)</pre>
1606
- <p>
1607
- The <code class="literal">G_LOCK_</code>* macros provide a convenient interface to <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>
1608
- with the advantage that they will expand to nothing in programs
1609
- compiled against a thread-disabled GLib, saving code and memory
1610
- there. <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()"><span class="type">G_LOCK_DEFINE</span></a> defines a lock. It can appear anywhere
1611
- variable definitions may appear in programs, i.e. in the first block
1612
- of a function or outside of functions. The <em class="parameter"><code>name</code></em> parameter will be
1613
- mangled to get the name of the <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>. This means that you
1614
- can use names of existing variables as the parameter - e.g. the name
1615
- of the variable you intent to protect with the lock. Look at our
1616
- <code class="function"><code class="function">give_me_next_number()</code></code> example using the
1617
- <code class="literal">G_LOCK_</code>* macros:
1618
- </p>
1619
- <p>
1620
- </p>
1621
- <div class="example">
1622
- <a name="id628794"></a><p class="title"><b>Example 6. Using the <code class="literal">G_LOCK_</code>* convenience macros</b></p>
1623
- <div class="example-contents">
1624
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1625
- <tbody>
1626
- <tr>
1627
- <td class="listing_lines" align="right"><pre>1
1628
- 2
1629
- 3
1630
- 4
1631
- 5
1632
- 6
1633
- 7
1634
- 8
1635
- 9
1636
- 10
1637
- 11
1638
- 12
1639
- 13
1640
- 14</pre></td>
1641
- <td class="listing_code"><pre class="programlisting"><span class="function"><a href="glib-Threads.html#G-LOCK-DEFINE:CAPS">G_LOCK_DEFINE</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1642
-
1643
- <span class="type">int</span>
1644
- <span class="function">give_me_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
1645
- <span class="cbracket">{</span>
1646
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="type">int</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
1647
- <span class="normal"> </span><span class="type">int</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1648
-
1649
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#G-LOCK:CAPS">G_LOCK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1650
- <span class="normal"> ret_val </span><span class="symbol">=</span><span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function">calc_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1651
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#G-UNLOCK:CAPS">G_UNLOCK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number</span><span class="symbol">);</span>
1652
-
1653
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> ret_val</span><span class="symbol">;</span>
1654
- <span class="cbracket">}</span></pre></td>
1655
- </tr>
1656
- </tbody>
1657
- </table>
1658
- </div>
1659
-
1660
- </div>
1661
- <p><br class="example-break">
1662
- </p>
1663
- <div class="variablelist"><table border="0">
1664
- <col align="left" valign="top">
1665
- <tbody><tr>
1666
- <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
1667
- <td>the name of the lock.
1668
- </td>
1669
- </tr></tbody>
1670
- </table></div>
1671
- </div>
1672
- <hr>
1673
- <div class="refsect2">
1674
- <a name="G-LOCK-DEFINE-STATIC:CAPS"></a><h3>G_LOCK_DEFINE_STATIC()</h3>
1675
- <pre class="programlisting">#define G_LOCK_DEFINE_STATIC(name)</pre>
1676
- <p>
1677
- This works like <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()"><span class="type">G_LOCK_DEFINE</span></a>, but it creates a static object.
1678
- </p>
1679
- <div class="variablelist"><table border="0">
1680
- <col align="left" valign="top">
1681
- <tbody><tr>
1682
- <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
1683
- <td>the name of the lock.
1684
- </td>
1685
- </tr></tbody>
1686
- </table></div>
1687
- </div>
1688
- <hr>
1689
- <div class="refsect2">
1690
- <a name="G-LOCK-EXTERN:CAPS"></a><h3>G_LOCK_EXTERN()</h3>
1691
- <pre class="programlisting">#define G_LOCK_EXTERN(name)</pre>
1692
- <p>
1693
- This declares a lock, that is defined with <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()"><span class="type">G_LOCK_DEFINE</span></a> in another
1694
- module.
1695
- </p>
1696
- <div class="variablelist"><table border="0">
1697
- <col align="left" valign="top">
1698
- <tbody><tr>
1699
- <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
1700
- <td>the name of the lock.
1701
- </td>
1702
- </tr></tbody>
1703
- </table></div>
1704
- </div>
1705
- <hr>
1706
- <div class="refsect2">
1707
- <a name="G-LOCK:CAPS"></a><h3>G_LOCK()</h3>
1708
- <pre class="programlisting">#define G_LOCK(name)</pre>
1709
- <p>
1710
- Works like <a class="link" href="glib-Threads.html#g-mutex-lock" title="g_mutex_lock ()"><code class="function">g_mutex_lock()</code></a>, but for a lock defined with
1711
- <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()"><span class="type">G_LOCK_DEFINE</span></a>.
1712
- </p>
1713
- <div class="variablelist"><table border="0">
1714
- <col align="left" valign="top">
1715
- <tbody><tr>
1716
- <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
1717
- <td>the name of the lock.
1718
- </td>
1719
- </tr></tbody>
1720
- </table></div>
1721
- </div>
1722
- <hr>
1723
- <div class="refsect2">
1724
- <a name="G-TRYLOCK:CAPS"></a><h3>G_TRYLOCK()</h3>
1725
- <pre class="programlisting">#define G_TRYLOCK(name)</pre>
1726
- <p>
1727
- Works like <a class="link" href="glib-Threads.html#g-mutex-trylock" title="g_mutex_trylock ()"><code class="function">g_mutex_trylock()</code></a>, but for a lock defined with
1728
- <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()"><span class="type">G_LOCK_DEFINE</span></a>.
1729
- </p>
1730
- <div class="variablelist"><table border="0">
1731
- <col align="left" valign="top">
1732
- <tbody>
1733
- <tr>
1734
- <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
1735
- <td>the name of the lock.
1736
- </td>
1737
- </tr>
1738
- <tr>
1739
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1740
- <td>
1741
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if the lock could be locked.
1742
- </td>
1743
- </tr>
1744
- </tbody>
1745
- </table></div>
1746
- </div>
1747
- <hr>
1748
- <div class="refsect2">
1749
- <a name="G-UNLOCK:CAPS"></a><h3>G_UNLOCK()</h3>
1750
- <pre class="programlisting">#define G_UNLOCK(name)</pre>
1751
- <p>
1752
- Works like <a class="link" href="glib-Threads.html#g-mutex-unlock" title="g_mutex_unlock ()"><code class="function">g_mutex_unlock()</code></a>, but for a lock defined with
1753
- <a class="link" href="glib-Threads.html#G-LOCK-DEFINE:CAPS" title="G_LOCK_DEFINE()"><span class="type">G_LOCK_DEFINE</span></a>.
1754
- </p>
1755
- <div class="variablelist"><table border="0">
1756
- <col align="left" valign="top">
1757
- <tbody><tr>
1758
- <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
1759
- <td>the name of the lock.
1760
- </td>
1761
- </tr></tbody>
1762
- </table></div>
1763
- </div>
1764
- <hr>
1765
- <div class="refsect2">
1766
- <a name="GStaticRecMutex"></a><h3>GStaticRecMutex</h3>
1767
- <pre class="programlisting">typedef struct {
1768
- } GStaticRecMutex;
1769
- </pre>
1770
- <p>
1771
- A <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> works like a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>, but it can be locked
1772
- multiple times by one thread. If you enter it n times, you have to
1773
- unlock it n times again to let other threads lock it. An exception
1774
- is the function <a class="link" href="glib-Threads.html#g-static-rec-mutex-unlock-full" title="g_static_rec_mutex_unlock_full ()"><code class="function">g_static_rec_mutex_unlock_full()</code></a>: that allows you to
1775
- unlock a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> completely returning the depth, (i.e. the
1776
- number of times this mutex was locked). The depth can later be used
1777
- to restore the state of the <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> by calling
1778
- <a class="link" href="glib-Threads.html#g-static-rec-mutex-lock-full" title="g_static_rec_mutex_lock_full ()"><code class="function">g_static_rec_mutex_lock_full()</code></a>.
1779
- </p>
1780
- <p>
1781
- Even though <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> is not opaque, it should only be used
1782
- with the following functions.
1783
- </p>
1784
- <p>
1785
- All of the <code class="function">g_static_rec_mutex_*</code> functions can
1786
- be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not been called. Then they do
1787
- nothing, apart from <code class="function">g_static_rec_mutex_trylock</code>,
1788
- which does nothing but returning <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>.
1789
- </p>
1790
- </div>
1791
- <hr>
1792
- <div class="refsect2">
1793
- <a name="G-STATIC-REC-MUTEX-INIT:CAPS"></a><h3>G_STATIC_REC_MUTEX_INIT</h3>
1794
- <pre class="programlisting">#define G_STATIC_REC_MUTEX_INIT { G_STATIC_MUTEX_INIT }
1795
- </pre>
1796
- <p>
1797
- A <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> must be initialized with this macro before it can
1798
- be used. This macro can used be to initialize a variable, but it
1799
- cannot be assigned to a variable. In that case you have to use
1800
- <a class="link" href="glib-Threads.html#g-static-rec-mutex-init" title="g_static_rec_mutex_init ()"><code class="function">g_static_rec_mutex_init()</code></a>.
1801
- </p>
1802
- <p>
1803
- </p>
1804
- <div class="informalexample">
1805
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1806
- <tbody>
1807
- <tr>
1808
- <td class="listing_lines" align="right"><pre>1</pre></td>
1809
- <td class="listing_code"><pre class="programlisting"><span class="usertype">GStaticRecMutex</span><span class="normal"> my_mutex </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-STATIC-REC-MUTEX-INIT:CAPS">G_STATIC_REC_MUTEX_INIT</a></span><span class="symbol">;</span></pre></td>
1810
- </tr>
1811
- </tbody>
1812
- </table>
1813
- </div>
1814
-
1815
- <p>
1816
- </p>
1817
- </div>
1818
- <hr>
1819
- <div class="refsect2">
1820
- <a name="g-static-rec-mutex-init"></a><h3>g_static_rec_mutex_init ()</h3>
1821
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rec_mutex_init (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);</pre>
1822
- <p>
1823
- A <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> must be initialized with this function before it
1824
- can be used. Alternatively you can initialize it with
1825
- <a class="link" href="glib-Threads.html#G-STATIC-REC-MUTEX-INIT:CAPS" title="G_STATIC_REC_MUTEX_INIT"><span class="type">G_STATIC_REC_MUTEX_INIT</span></a>.
1826
- </p>
1827
- <div class="variablelist"><table border="0">
1828
- <col align="left" valign="top">
1829
- <tbody><tr>
1830
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1831
- <td>a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> to be initialized.
1832
- </td>
1833
- </tr></tbody>
1834
- </table></div>
1835
- </div>
1836
- <hr>
1837
- <div class="refsect2">
1838
- <a name="g-static-rec-mutex-lock"></a><h3>g_static_rec_mutex_lock ()</h3>
1839
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rec_mutex_lock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);</pre>
1840
- <p>
1841
- Locks <em class="parameter"><code>mutex</code></em>. If <em class="parameter"><code>mutex</code></em> is already locked by another thread, the
1842
- current thread will block until <em class="parameter"><code>mutex</code></em> is unlocked by the other
1843
- thread. If <em class="parameter"><code>mutex</code></em> is already locked by the calling thread, this
1844
- functions increases the depth of <em class="parameter"><code>mutex</code></em> and returns immediately.
1845
- </p>
1846
- <div class="variablelist"><table border="0">
1847
- <col align="left" valign="top">
1848
- <tbody><tr>
1849
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1850
- <td>a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> to lock.
1851
- </td>
1852
- </tr></tbody>
1853
- </table></div>
1854
- </div>
1855
- <hr>
1856
- <div class="refsect2">
1857
- <a name="g-static-rec-mutex-trylock"></a><h3>g_static_rec_mutex_trylock ()</h3>
1858
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_static_rec_mutex_trylock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);</pre>
1859
- <p>
1860
- Tries to lock <em class="parameter"><code>mutex</code></em>. If <em class="parameter"><code>mutex</code></em> is already locked by another thread,
1861
- it immediately returns <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a>. Otherwise it locks <em class="parameter"><code>mutex</code></em> and returns
1862
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>. If <em class="parameter"><code>mutex</code></em> is already locked by the calling thread, this
1863
- functions increases the depth of <em class="parameter"><code>mutex</code></em> and immediately returns
1864
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>.
1865
- </p>
1866
- <div class="variablelist"><table border="0">
1867
- <col align="left" valign="top">
1868
- <tbody>
1869
- <tr>
1870
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1871
- <td>a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> to lock.
1872
- </td>
1873
- </tr>
1874
- <tr>
1875
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1876
- <td>
1877
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if <em class="parameter"><code>mutex</code></em> could be locked.
1878
- </td>
1879
- </tr>
1880
- </tbody>
1881
- </table></div>
1882
- </div>
1883
- <hr>
1884
- <div class="refsect2">
1885
- <a name="g-static-rec-mutex-unlock"></a><h3>g_static_rec_mutex_unlock ()</h3>
1886
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rec_mutex_unlock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);</pre>
1887
- <p>
1888
- Unlocks <em class="parameter"><code>mutex</code></em>. Another thread will be allowed to lock <em class="parameter"><code>mutex</code></em> only
1889
- when it has been unlocked as many times as it had been locked
1890
- before. If <em class="parameter"><code>mutex</code></em> is completely unlocked and another thread is
1891
- blocked in a <a class="link" href="glib-Threads.html#g-static-rec-mutex-lock" title="g_static_rec_mutex_lock ()"><code class="function">g_static_rec_mutex_lock()</code></a> call for <em class="parameter"><code>mutex</code></em>, it will be
1892
- woken and can lock <em class="parameter"><code>mutex</code></em> itself.
1893
- </p>
1894
- <div class="variablelist"><table border="0">
1895
- <col align="left" valign="top">
1896
- <tbody><tr>
1897
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1898
- <td>a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> to unlock.
1899
- </td>
1900
- </tr></tbody>
1901
- </table></div>
1902
- </div>
1903
- <hr>
1904
- <div class="refsect2">
1905
- <a name="g-static-rec-mutex-lock-full"></a><h3>g_static_rec_mutex_lock_full ()</h3>
1906
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rec_mutex_lock_full (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>,
1907
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="type">guint</span></a> depth</code></em>);</pre>
1908
- <p>
1909
- Works like calling <a class="link" href="glib-Threads.html#g-static-rec-mutex-lock" title="g_static_rec_mutex_lock ()"><code class="function">g_static_rec_mutex_lock()</code></a> for <em class="parameter"><code>mutex</code></em> <em class="parameter"><code>depth</code></em> times.
1910
- </p>
1911
- <div class="variablelist"><table border="0">
1912
- <col align="left" valign="top">
1913
- <tbody>
1914
- <tr>
1915
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1916
- <td>a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> to lock.
1917
- </td>
1918
- </tr>
1919
- <tr>
1920
- <td><p><span class="term"><em class="parameter"><code>depth</code></em> :</span></p></td>
1921
- <td>number of times this mutex has to be unlocked to be
1922
- completely unlocked.
1923
- </td>
1924
- </tr>
1925
- </tbody>
1926
- </table></div>
1927
- </div>
1928
- <hr>
1929
- <div class="refsect2">
1930
- <a name="g-static-rec-mutex-unlock-full"></a><h3>g_static_rec_mutex_unlock_full ()</h3>
1931
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> g_static_rec_mutex_unlock_full (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);</pre>
1932
- <p>
1933
- Completely unlocks <em class="parameter"><code>mutex</code></em>. If another thread is blocked in a
1934
- <a class="link" href="glib-Threads.html#g-static-rec-mutex-lock" title="g_static_rec_mutex_lock ()"><code class="function">g_static_rec_mutex_lock()</code></a> call for <em class="parameter"><code>mutex</code></em>, it will be woken and can
1935
- lock <em class="parameter"><code>mutex</code></em> itself. This function returns the number of times that
1936
- <em class="parameter"><code>mutex</code></em> has been locked by the current thread. To restore the state
1937
- before the call to <a class="link" href="glib-Threads.html#g-static-rec-mutex-unlock-full" title="g_static_rec_mutex_unlock_full ()"><code class="function">g_static_rec_mutex_unlock_full()</code></a> you can call
1938
- <a class="link" href="glib-Threads.html#g-static-rec-mutex-lock-full" title="g_static_rec_mutex_lock_full ()"><code class="function">g_static_rec_mutex_lock_full()</code></a> with the depth returned by this
1939
- function.
1940
- </p>
1941
- <div class="variablelist"><table border="0">
1942
- <col align="left" valign="top">
1943
- <tbody>
1944
- <tr>
1945
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1946
- <td>a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> to completely unlock.
1947
- </td>
1948
- </tr>
1949
- <tr>
1950
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1951
- <td>number of times <em class="parameter"><code>mutex</code></em> has been locked by the current
1952
- thread.
1953
- </td>
1954
- </tr>
1955
- </tbody>
1956
- </table></div>
1957
- </div>
1958
- <hr>
1959
- <div class="refsect2">
1960
- <a name="g-static-rec-mutex-free"></a><h3>g_static_rec_mutex_free ()</h3>
1961
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rec_mutex_free (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> *mutex</code></em>);</pre>
1962
- <p>
1963
- Releases all resources allocated to a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a>.
1964
- </p>
1965
- <p>
1966
- You don't have to call this functions for a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> with an
1967
- unbounded lifetime, i.e. objects declared 'static', but if you have
1968
- a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> as a member of a structure and the structure is
1969
- freed, you should also free the <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a>.
1970
- </p>
1971
- <div class="variablelist"><table border="0">
1972
- <col align="left" valign="top">
1973
- <tbody><tr>
1974
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
1975
- <td>a <a class="link" href="glib-Threads.html#GStaticRecMutex" title="GStaticRecMutex"><span class="type">GStaticRecMutex</span></a> to be freed.
1976
- </td>
1977
- </tr></tbody>
1978
- </table></div>
1979
- </div>
1980
- <hr>
1981
- <div class="refsect2">
1982
- <a name="GStaticRWLock"></a><h3>GStaticRWLock</h3>
1983
- <pre class="programlisting">typedef struct {
1984
- } GStaticRWLock;
1985
- </pre>
1986
- <p>
1987
- The <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> struct represents a read-write lock. A read-write
1988
- lock can be used for protecting data that some portions of code only
1989
- read from, while others also write. In such situations it is
1990
- desirable that several readers can read at once, whereas of course
1991
- only one writer may write at a time. Take a look at the following
1992
- example:
1993
- </p>
1994
- <p>
1995
- </p>
1996
- <div class="example">
1997
- <a name="id630409"></a><p class="title"><b>Example 7. An array with access functions</b></p>
1998
- <div class="example-contents">
1999
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
2000
- <tbody>
2001
- <tr>
2002
- <td class="listing_lines" align="right"><pre>1
2003
- 2
2004
- 3
2005
- 4
2006
- 5
2007
- 6
2008
- 7
2009
- 8
2010
- 9
2011
- 10
2012
- 11
2013
- 12
2014
- 13
2015
- 14
2016
- 15
2017
- 16
2018
- 17
2019
- 18
2020
- 19
2021
- 20
2022
- 21
2023
- 22
2024
- 23
2025
- 24
2026
- 25
2027
- 26
2028
- 27
2029
- 28
2030
- 29
2031
- 30
2032
- 31
2033
- 32
2034
- 33</pre></td>
2035
- <td class="listing_code"><pre class="programlisting"><span class="usertype">GStaticRWLock</span><span class="normal"> rwlock </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-STATIC-RW-LOCK-INIT:CAPS">G_STATIC_RW_LOCK_INIT</a></span><span class="symbol">;</span>
2036
- <span class="usertype">GPtrArray</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">array</span><span class="symbol">;</span>
2037
-
2038
- <span class="normal"><a href="glib-Basic-Types.html#gpointer">gpointer</a></span>
2039
- <span class="function">my_array_get</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">guint</span><span class="normal"> index</span><span class="symbol">)</span>
2040
- <span class="cbracket">{</span>
2041
- <span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> retval </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
2042
-
2043
- <span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">array</span><span class="symbol">)</span>
2044
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
2045
-
2046
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-rw-lock-reader-lock">g_static_rw_lock_reader_lock</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">rwlock</span><span class="symbol">);</span>
2047
- <span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">index </span><span class="symbol">&lt;</span><span class="normal"> array</span><span class="symbol">-&gt;</span><span class="normal">len</span><span class="symbol">)</span>
2048
- <span class="normal"> retval </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Pointer-Arrays.html#g-ptr-array-index">g_ptr_array_index</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">array</span><span class="symbol">,</span><span class="normal"> index</span><span class="symbol">);</span>
2049
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-rw-lock-reader-unlock">g_static_rw_lock_reader_unlock</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">rwlock</span><span class="symbol">);</span>
2050
-
2051
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> retval</span><span class="symbol">;</span>
2052
- <span class="cbracket">}</span>
2053
-
2054
- <span class="type">void</span>
2055
- <span class="function">my_array_set</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">guint</span><span class="normal"> index</span><span class="symbol">,</span><span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
2056
- <span class="cbracket">{</span>
2057
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-rw-lock-writer-lock">g_static_rw_lock_writer_lock</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">rwlock</span><span class="symbol">);</span>
2058
-
2059
- <span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">array</span><span class="symbol">)</span>
2060
- <span class="normal"> array </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Pointer-Arrays.html#g-ptr-array-new">g_ptr_array_new</a></span><span class="normal"> </span><span class="symbol">();</span>
2061
-
2062
- <span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">index </span><span class="symbol">&gt;=</span><span class="normal"> array</span><span class="symbol">-&gt;</span><span class="normal">len</span><span class="symbol">)</span>
2063
- <span class="normal"> </span><span class="function"><a href="glib-Pointer-Arrays.html#g-ptr-array-set-size">g_ptr_array_set_size</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">array</span><span class="symbol">,</span><span class="normal"> index</span><span class="symbol">+</span><span class="number">1</span><span class="symbol">);</span>
2064
- <span class="normal"> </span><span class="function"><a href="glib-Pointer-Arrays.html#g-ptr-array-index">g_ptr_array_index</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">array</span><span class="symbol">,</span><span class="normal"> index</span><span class="symbol">)</span><span class="normal"> </span><span class="symbol">=</span><span class="normal"> data</span><span class="symbol">;</span>
2065
-
2066
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-rw-lock-writer-unlock">g_static_rw_lock_writer_unlock</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">rwlock</span><span class="symbol">);</span>
2067
- <span class="cbracket">}</span></pre></td>
2068
- </tr>
2069
- </tbody>
2070
- </table>
2071
- </div>
2072
-
2073
- </div>
2074
- <p><br class="example-break">
2075
- </p>
2076
- <p>
2077
- This example shows an array which can be accessed by many readers
2078
- (the <code class="function"><code class="function">my_array_get()</code></code> function) simultaneously,
2079
- whereas the writers (the <code class="function"><code class="function">my_array_set()</code></code>
2080
- function) will only be allowed once at a time and only if no readers
2081
- currently access the array. This is because of the potentially
2082
- dangerous resizing of the array. Using these functions is fully
2083
- multi-thread safe now.
2084
- </p>
2085
- <p>
2086
- Most of the time, writers should have precedence over readers. That
2087
- means, for this implementation, that as soon as a writer wants to
2088
- lock the data, no other reader is allowed to lock the data, whereas,
2089
- of course, the readers that already have locked the data are allowed
2090
- to finish their operation. As soon as the last reader unlocks the
2091
- data, the writer will lock it.
2092
- </p>
2093
- <p>
2094
- Even though <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> is not opaque, it should only be used
2095
- with the following functions.
2096
- </p>
2097
- <p>
2098
- All of the <code class="function">g_static_rw_lock_*</code> functions can be
2099
- used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not been called. Then they do
2100
- nothing, apart from <code class="function">g_static_rw_lock_*_trylock</code>,
2101
- which does nothing but returning <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>.
2102
- </p>
2103
- <p>
2104
- </p>
2105
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2106
- <h3 class="title">Note</h3>
2107
- <p>A read-write lock has a higher overhead than a mutex. For
2108
- example, both <a class="link" href="glib-Threads.html#g-static-rw-lock-reader-lock" title="g_static_rw_lock_reader_lock ()"><code class="function">g_static_rw_lock_reader_lock()</code></a> and
2109
- <a class="link" href="glib-Threads.html#g-static-rw-lock-reader-unlock" title="g_static_rw_lock_reader_unlock ()"><code class="function">g_static_rw_lock_reader_unlock()</code></a> have to lock and unlock a
2110
- <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>, so it takes at least twice the time to lock and unlock
2111
- a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> that it does to lock and unlock a <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>. So
2112
- only data structures that are accessed by multiple readers, and which
2113
- keep the lock for a considerable time justify a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a>. The
2114
- above example most probably would fare better with a
2115
- <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>.</p>
2116
- </div>
2117
- <p>
2118
- </p>
2119
- </div>
2120
- <hr>
2121
- <div class="refsect2">
2122
- <a name="G-STATIC-RW-LOCK-INIT:CAPS"></a><h3>G_STATIC_RW_LOCK_INIT</h3>
2123
- <pre class="programlisting">#define G_STATIC_RW_LOCK_INIT { G_STATIC_MUTEX_INIT, NULL, NULL, 0, FALSE, 0, 0 }
2124
- </pre>
2125
- <p>
2126
- A <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> must be initialized with this macro before it can
2127
- be used. This macro can used be to initialize a variable, but it
2128
- cannot be assigned to a variable. In that case you have to use
2129
- <a class="link" href="glib-Threads.html#g-static-rw-lock-init" title="g_static_rw_lock_init ()"><code class="function">g_static_rw_lock_init()</code></a>.
2130
- </p>
2131
- <p>
2132
- </p>
2133
- <div class="informalexample">
2134
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
2135
- <tbody>
2136
- <tr>
2137
- <td class="listing_lines" align="right"><pre>1</pre></td>
2138
- <td class="listing_code"><pre class="programlisting"><span class="usertype">GStaticRWLock</span><span class="normal"> my_lock </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-STATIC-RW-LOCK-INIT:CAPS">G_STATIC_RW_LOCK_INIT</a></span><span class="symbol">;</span></pre></td>
2139
- </tr>
2140
- </tbody>
2141
- </table>
2142
- </div>
2143
-
2144
- <p>
2145
- </p>
2146
- </div>
2147
- <hr>
2148
- <div class="refsect2">
2149
- <a name="g-static-rw-lock-init"></a><h3>g_static_rw_lock_init ()</h3>
2150
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rw_lock_init (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2151
- <p>
2152
- A <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> must be initialized with this function before it
2153
- can be used. Alternatively you can initialize it with
2154
- <a class="link" href="glib-Threads.html#G-STATIC-RW-LOCK-INIT:CAPS" title="G_STATIC_RW_LOCK_INIT"><span class="type">G_STATIC_RW_LOCK_INIT</span></a>.
2155
- </p>
2156
- <div class="variablelist"><table border="0">
2157
- <col align="left" valign="top">
2158
- <tbody><tr>
2159
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2160
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to be initialized.
2161
- </td>
2162
- </tr></tbody>
2163
- </table></div>
2164
- </div>
2165
- <hr>
2166
- <div class="refsect2">
2167
- <a name="g-static-rw-lock-reader-lock"></a><h3>g_static_rw_lock_reader_lock ()</h3>
2168
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rw_lock_reader_lock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2169
- <p>
2170
- Locks <em class="parameter"><code>lock</code></em> for reading. There may be unlimited concurrent locks for
2171
- reading of a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> at the same time. If <em class="parameter"><code>lock</code></em> is already
2172
- locked for writing by another thread or if another thread is already
2173
- waiting to lock <em class="parameter"><code>lock</code></em> for writing, this function will block until
2174
- <em class="parameter"><code>lock</code></em> is unlocked by the other writing thread and no other writing
2175
- threads want to lock <em class="parameter"><code>lock</code></em>. This lock has to be unlocked by
2176
- <a class="link" href="glib-Threads.html#g-static-rw-lock-reader-unlock" title="g_static_rw_lock_reader_unlock ()"><code class="function">g_static_rw_lock_reader_unlock()</code></a>.
2177
- </p>
2178
- <p>
2179
- <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> is not recursive. It might seem to be possible to
2180
- recursively lock for reading, but that can result in a deadlock, due
2181
- to writer preference.
2182
- </p>
2183
- <div class="variablelist"><table border="0">
2184
- <col align="left" valign="top">
2185
- <tbody><tr>
2186
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2187
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to lock for reading.
2188
- </td>
2189
- </tr></tbody>
2190
- </table></div>
2191
- </div>
2192
- <hr>
2193
- <div class="refsect2">
2194
- <a name="g-static-rw-lock-reader-trylock"></a><h3>g_static_rw_lock_reader_trylock ()</h3>
2195
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_static_rw_lock_reader_trylock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2196
- <p>
2197
- Tries to lock <em class="parameter"><code>lock</code></em> for reading. If <em class="parameter"><code>lock</code></em> is already locked for
2198
- writing by another thread or if another thread is already waiting to
2199
- lock <em class="parameter"><code>lock</code></em> for writing, immediately returns <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a>. Otherwise locks
2200
- <em class="parameter"><code>lock</code></em> for reading and returns <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>. This lock has to be unlocked by
2201
- <a class="link" href="glib-Threads.html#g-static-rw-lock-reader-unlock" title="g_static_rw_lock_reader_unlock ()"><code class="function">g_static_rw_lock_reader_unlock()</code></a>.
2202
- </p>
2203
- <div class="variablelist"><table border="0">
2204
- <col align="left" valign="top">
2205
- <tbody>
2206
- <tr>
2207
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2208
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to lock for reading.
2209
- </td>
2210
- </tr>
2211
- <tr>
2212
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2213
- <td>
2214
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if <em class="parameter"><code>lock</code></em> could be locked for reading.
2215
- </td>
2216
- </tr>
2217
- </tbody>
2218
- </table></div>
2219
- </div>
2220
- <hr>
2221
- <div class="refsect2">
2222
- <a name="g-static-rw-lock-reader-unlock"></a><h3>g_static_rw_lock_reader_unlock ()</h3>
2223
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rw_lock_reader_unlock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2224
- <p>
2225
- Unlocks <em class="parameter"><code>lock</code></em>. If a thread waits to lock <em class="parameter"><code>lock</code></em> for writing and all
2226
- locks for reading have been unlocked, the waiting thread is woken up
2227
- and can lock <em class="parameter"><code>lock</code></em> for writing.
2228
- </p>
2229
- <div class="variablelist"><table border="0">
2230
- <col align="left" valign="top">
2231
- <tbody><tr>
2232
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2233
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to unlock after reading.
2234
- </td>
2235
- </tr></tbody>
2236
- </table></div>
2237
- </div>
2238
- <hr>
2239
- <div class="refsect2">
2240
- <a name="g-static-rw-lock-writer-lock"></a><h3>g_static_rw_lock_writer_lock ()</h3>
2241
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rw_lock_writer_lock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2242
- <p>
2243
- Locks <em class="parameter"><code>lock</code></em> for writing. If <em class="parameter"><code>lock</code></em> is already locked for writing or
2244
- reading by other threads, this function will block until <em class="parameter"><code>lock</code></em> is
2245
- completely unlocked and then lock <em class="parameter"><code>lock</code></em> for writing. While this
2246
- functions waits to lock <em class="parameter"><code>lock</code></em>, no other thread can lock <em class="parameter"><code>lock</code></em> for
2247
- reading. When <em class="parameter"><code>lock</code></em> is locked for writing, no other thread can lock
2248
- <em class="parameter"><code>lock</code></em> (neither for reading nor writing). This lock has to be
2249
- unlocked by <a class="link" href="glib-Threads.html#g-static-rw-lock-writer-unlock" title="g_static_rw_lock_writer_unlock ()"><code class="function">g_static_rw_lock_writer_unlock()</code></a>.
2250
- </p>
2251
- <div class="variablelist"><table border="0">
2252
- <col align="left" valign="top">
2253
- <tbody><tr>
2254
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2255
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to lock for writing.
2256
- </td>
2257
- </tr></tbody>
2258
- </table></div>
2259
- </div>
2260
- <hr>
2261
- <div class="refsect2">
2262
- <a name="g-static-rw-lock-writer-trylock"></a><h3>g_static_rw_lock_writer_trylock ()</h3>
2263
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_static_rw_lock_writer_trylock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2264
- <p>
2265
- Tries to lock <em class="parameter"><code>lock</code></em> for writing. If <em class="parameter"><code>lock</code></em> is already locked (for
2266
- either reading or writing) by another thread, it immediately returns
2267
- <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a>. Otherwise it locks <em class="parameter"><code>lock</code></em> for writing and returns <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>. This
2268
- lock has to be unlocked by <a class="link" href="glib-Threads.html#g-static-rw-lock-writer-unlock" title="g_static_rw_lock_writer_unlock ()"><code class="function">g_static_rw_lock_writer_unlock()</code></a>.
2269
- </p>
2270
- <div class="variablelist"><table border="0">
2271
- <col align="left" valign="top">
2272
- <tbody>
2273
- <tr>
2274
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2275
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to lock for writing.
2276
- </td>
2277
- </tr>
2278
- <tr>
2279
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2280
- <td>
2281
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>, if <em class="parameter"><code>lock</code></em> could be locked for writing.
2282
- </td>
2283
- </tr>
2284
- </tbody>
2285
- </table></div>
2286
- </div>
2287
- <hr>
2288
- <div class="refsect2">
2289
- <a name="g-static-rw-lock-writer-unlock"></a><h3>g_static_rw_lock_writer_unlock ()</h3>
2290
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rw_lock_writer_unlock (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2291
- <p>
2292
- Unlocks <em class="parameter"><code>lock</code></em>. If a thread is waiting to lock <em class="parameter"><code>lock</code></em> for writing and
2293
- all locks for reading have been unlocked, the waiting thread is
2294
- woken up and can lock <em class="parameter"><code>lock</code></em> for writing. If no thread is waiting to
2295
- lock <em class="parameter"><code>lock</code></em> for writing, and some thread or threads are waiting to
2296
- lock <em class="parameter"><code>lock</code></em> for reading, the waiting threads are woken up and can
2297
- lock <em class="parameter"><code>lock</code></em> for reading.
2298
- </p>
2299
- <div class="variablelist"><table border="0">
2300
- <col align="left" valign="top">
2301
- <tbody><tr>
2302
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2303
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to unlock after writing.
2304
- </td>
2305
- </tr></tbody>
2306
- </table></div>
2307
- </div>
2308
- <hr>
2309
- <div class="refsect2">
2310
- <a name="g-static-rw-lock-free"></a><h3>g_static_rw_lock_free ()</h3>
2311
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_rw_lock_free (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> *lock</code></em>);</pre>
2312
- <p>
2313
- Releases all resources allocated to <em class="parameter"><code>lock</code></em>.
2314
- </p>
2315
- <p>
2316
- You don't have to call this functions for a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> with an
2317
- unbounded lifetime, i.e. objects declared 'static', but if you have
2318
- a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> as a member of a structure, and the structure is
2319
- freed, you should also free the <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a>.
2320
- </p>
2321
- <div class="variablelist"><table border="0">
2322
- <col align="left" valign="top">
2323
- <tbody><tr>
2324
- <td><p><span class="term"><em class="parameter"><code>lock</code></em> :</span></p></td>
2325
- <td>a <a class="link" href="glib-Threads.html#GStaticRWLock" title="GStaticRWLock"><span class="type">GStaticRWLock</span></a> to be freed.
2326
- </td>
2327
- </tr></tbody>
2328
- </table></div>
2329
- </div>
2330
- <hr>
2331
- <div class="refsect2">
2332
- <a name="GCond"></a><h3>GCond</h3>
2333
- <pre class="programlisting">typedef struct _GCond GCond;</pre>
2334
- <p>
2335
- The <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> struct is an opaque data structure that represents a
2336
- condition. Threads can block on a <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> if they find a certain
2337
- condition to be false. If other threads change the state of this
2338
- condition they signal the <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>, and that causes the waiting
2339
- threads to be woken up.
2340
- </p>
2341
- <p>
2342
- </p>
2343
- <div class="example">
2344
- <a name="id631812"></a><p class="title"><b>Example 8. 
2345
- Using GCond to block a thread until a condition is satisfied
2346
- </b></p>
2347
- <div class="example-contents">
2348
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
2349
- <tbody>
2350
- <tr>
2351
- <td class="listing_lines" align="right"><pre>1
2352
- 2
2353
- 3
2354
- 4
2355
- 5
2356
- 6
2357
- 7
2358
- 8
2359
- 9
2360
- 10
2361
- 11
2362
- 12
2363
- 13
2364
- 14
2365
- 15
2366
- 16
2367
- 17
2368
- 18
2369
- 19
2370
- 20
2371
- 21
2372
- 22
2373
- 23
2374
- 24
2375
- 25
2376
- 26
2377
- 27</pre></td>
2378
- <td class="listing_code"><pre class="programlisting"><span class="normal"><a href="glib-Threads.html#GCond">GCond</a></span><span class="symbol">*</span><span class="normal"> data_cond </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span><span class="normal"> </span><span class="comment">/* Must be initialized somewhere */</span>
2379
- <span class="normal"><a href="glib-Threads.html#GMutex">GMutex</a></span><span class="symbol">*</span><span class="normal"> data_mutex </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span><span class="normal"> </span><span class="comment">/* Must be initialized somewhere */</span>
2380
- <span class="usertype">gpointer</span><span class="normal"> current_data </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
2381
-
2382
- <span class="type">void</span>
2383
- <span class="function">push_data</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
2384
- <span class="cbracket">{</span>
2385
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-lock">g_mutex_lock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data_mutex</span><span class="symbol">);</span>
2386
- <span class="normal"> current_data </span><span class="symbol">=</span><span class="normal"> data</span><span class="symbol">;</span>
2387
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-cond-signal">g_cond_signal</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data_cond</span><span class="symbol">);</span>
2388
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-unlock">g_mutex_unlock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data_mutex</span><span class="symbol">);</span>
2389
- <span class="cbracket">}</span>
2390
-
2391
- <span class="normal"><a href="glib-Basic-Types.html#gpointer">gpointer</a></span>
2392
- <span class="function">pop_data</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
2393
- <span class="cbracket">{</span>
2394
- <span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">;</span>
2395
-
2396
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-lock">g_mutex_lock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data_mutex</span><span class="symbol">);</span>
2397
- <span class="normal"> </span><span class="keyword">while</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">current_data</span><span class="symbol">)</span>
2398
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-cond-wait">g_cond_wait</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data_cond</span><span class="symbol">,</span><span class="normal"> data_mutex</span><span class="symbol">);</span>
2399
- <span class="normal"> data </span><span class="symbol">=</span><span class="normal"> current_data</span><span class="symbol">;</span>
2400
- <span class="normal"> current_data </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
2401
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-mutex-unlock">g_mutex_unlock</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data_mutex</span><span class="symbol">);</span>
2402
-
2403
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> data</span><span class="symbol">;</span>
2404
- <span class="cbracket">}</span></pre></td>
2405
- </tr>
2406
- </tbody>
2407
- </table>
2408
- </div>
2409
-
2410
- </div>
2411
- <p><br class="example-break">
2412
- </p>
2413
- <p>
2414
- Whenever a thread calls <code class="function"><code class="function">pop_data()</code></code> now, it will
2415
- wait until current_data is non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, i.e. until some other thread
2416
- has called <code class="function"><code class="function">push_data()</code></code>.
2417
- </p>
2418
- <p>
2419
- </p>
2420
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2421
- <h3 class="title">Note</h3>
2422
- <p>It is important to use the <a class="link" href="glib-Threads.html#g-cond-wait" title="g_cond_wait ()"><code class="function">g_cond_wait()</code></a> and
2423
- <a class="link" href="glib-Threads.html#g-cond-timed-wait" title="g_cond_timed_wait ()"><code class="function">g_cond_timed_wait()</code></a> functions only inside a loop which checks for the
2424
- condition to be true. It is not guaranteed that the waiting thread
2425
- will find the condition fulfilled after it wakes up, even if the
2426
- signaling thread left the condition in that state: another thread may
2427
- have altered the condition before the waiting thread got the chance
2428
- to be woken up, even if the condition itself is protected by a
2429
- <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>, like above.</p>
2430
- </div>
2431
- <p>
2432
- </p>
2433
- <p>
2434
- A <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> should only be accessed via the following functions.
2435
- </p>
2436
- <p>
2437
- </p>
2438
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2439
- <h3 class="title">Note</h3>
2440
- <p>All of the <code class="function">g_cond_*</code> functions are
2441
- actually macros. Apart from taking their addresses, you can however
2442
- use them as if they were functions.</p>
2443
- </div>
2444
- <p>
2445
- </p>
2446
- </div>
2447
- <hr>
2448
- <div class="refsect2">
2449
- <a name="g-cond-new"></a><h3>g_cond_new ()</h3>
2450
- <pre class="programlisting"><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="returnvalue">GCond</span></a>* g_cond_new ();</pre>
2451
- <p>
2452
- Creates a new <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>. This function will abort, if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>
2453
- has not been called yet.
2454
- </p>
2455
- <div class="variablelist"><table border="0">
2456
- <col align="left" valign="top">
2457
- <tbody><tr>
2458
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2459
- <td>a new <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>.
2460
- </td>
2461
- </tr></tbody>
2462
- </table></div>
2463
- </div>
2464
- <hr>
2465
- <div class="refsect2">
2466
- <a name="g-cond-signal"></a><h3>g_cond_signal ()</h3>
2467
- <pre class="programlisting"><span class="returnvalue">void</span> g_cond_signal (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>);</pre>
2468
- <p>
2469
- If threads are waiting for <em class="parameter"><code>cond</code></em>, exactly one of them is woken up.
2470
- It is good practice to hold the same lock as the waiting thread
2471
- while calling this function, though not required.
2472
- </p>
2473
- <p>
2474
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
2475
- called, and, in that case, will do nothing.
2476
- </p>
2477
- <div class="variablelist"><table border="0">
2478
- <col align="left" valign="top">
2479
- <tbody><tr>
2480
- <td><p><span class="term"><em class="parameter"><code>cond</code></em> :</span></p></td>
2481
- <td>a <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>.
2482
- </td>
2483
- </tr></tbody>
2484
- </table></div>
2485
- </div>
2486
- <hr>
2487
- <div class="refsect2">
2488
- <a name="g-cond-broadcast"></a><h3>g_cond_broadcast ()</h3>
2489
- <pre class="programlisting"><span class="returnvalue">void</span> g_cond_broadcast (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>);</pre>
2490
- <p>
2491
- If threads are waiting for <em class="parameter"><code>cond</code></em>, all of them are woken up. It is
2492
- good practice to lock the same mutex as the waiting threads, while
2493
- calling this function, though not required.
2494
- </p>
2495
- <p>
2496
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
2497
- called, and, in that case, will do nothing.
2498
- </p>
2499
- <div class="variablelist"><table border="0">
2500
- <col align="left" valign="top">
2501
- <tbody><tr>
2502
- <td><p><span class="term"><em class="parameter"><code>cond</code></em> :</span></p></td>
2503
- <td>a <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>.
2504
- </td>
2505
- </tr></tbody>
2506
- </table></div>
2507
- </div>
2508
- <hr>
2509
- <div class="refsect2">
2510
- <a name="g-cond-wait"></a><h3>g_cond_wait ()</h3>
2511
- <pre class="programlisting"><span class="returnvalue">void</span> g_cond_wait (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>,
2512
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>);</pre>
2513
- <p>
2514
- Waits until this thread is woken up on <em class="parameter"><code>cond</code></em>. The <em class="parameter"><code>mutex</code></em> is unlocked
2515
- before falling asleep and locked again before resuming.
2516
- </p>
2517
- <p>
2518
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
2519
- called, and, in that case, will immediately return.
2520
- </p>
2521
- <div class="variablelist"><table border="0">
2522
- <col align="left" valign="top">
2523
- <tbody>
2524
- <tr>
2525
- <td><p><span class="term"><em class="parameter"><code>cond</code></em> :</span></p></td>
2526
- <td>a <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>.
2527
- </td>
2528
- </tr>
2529
- <tr>
2530
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
2531
- <td>a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a>, that is currently locked.
2532
- </td>
2533
- </tr>
2534
- </tbody>
2535
- </table></div>
2536
- </div>
2537
- <hr>
2538
- <div class="refsect2">
2539
- <a name="g-cond-timed-wait"></a><h3>g_cond_timed_wait ()</h3>
2540
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_cond_timed_wait (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>,
2541
- <em class="parameter"><code><a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> *mutex</code></em>,
2542
- <em class="parameter"><code><a class="link" href="glib-Date-and-Time-Functions.html#GTimeVal" title="GTimeVal"><span class="type">GTimeVal</span></a> *abs_time</code></em>);</pre>
2543
- <p>
2544
- Waits until this thread is woken up on <em class="parameter"><code>cond</code></em>, but not longer than
2545
- until the time specified by <em class="parameter"><code>abs_time</code></em>. The <em class="parameter"><code>mutex</code></em> is unlocked before
2546
- falling asleep and locked again before resuming.
2547
- </p>
2548
- <p>
2549
- If <em class="parameter"><code>abs_time</code></em> is <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, <a class="link" href="glib-Threads.html#g-cond-timed-wait" title="g_cond_timed_wait ()"><code class="function">g_cond_timed_wait()</code></a> acts like <a class="link" href="glib-Threads.html#g-cond-wait" title="g_cond_wait ()"><code class="function">g_cond_wait()</code></a>.
2550
- </p>
2551
- <p>
2552
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
2553
- called, and, in that case, will immediately return <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a>.
2554
- </p>
2555
- <p>
2556
- To easily calculate <em class="parameter"><code>abs_time</code></em> a combination of <a class="link" href="glib-Date-and-Time-Functions.html#g-get-current-time" title="g_get_current_time ()"><code class="function">g_get_current_time()</code></a>
2557
- and <a class="link" href="glib-Date-and-Time-Functions.html#g-time-val-add" title="g_time_val_add ()"><code class="function">g_time_val_add()</code></a> can be used.
2558
- </p>
2559
- <div class="variablelist"><table border="0">
2560
- <col align="left" valign="top">
2561
- <tbody>
2562
- <tr>
2563
- <td><p><span class="term"><em class="parameter"><code>cond</code></em> :</span></p></td>
2564
- <td>a <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>.
2565
- </td>
2566
- </tr>
2567
- <tr>
2568
- <td><p><span class="term"><em class="parameter"><code>mutex</code></em> :</span></p></td>
2569
- <td>a <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> that is currently locked.
2570
- </td>
2571
- </tr>
2572
- <tr>
2573
- <td><p><span class="term"><em class="parameter"><code>abs_time</code></em> :</span></p></td>
2574
- <td>a <a class="link" href="glib-Date-and-Time-Functions.html#GTimeVal" title="GTimeVal"><span class="type">GTimeVal</span></a>, determining the final time.
2575
- </td>
2576
- </tr>
2577
- <tr>
2578
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2579
- <td>
2580
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if <em class="parameter"><code>cond</code></em> was signalled, or <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> on timeout.
2581
- </td>
2582
- </tr>
2583
- </tbody>
2584
- </table></div>
2585
- </div>
2586
- <hr>
2587
- <div class="refsect2">
2588
- <a name="g-cond-free"></a><h3>g_cond_free ()</h3>
2589
- <pre class="programlisting"><span class="returnvalue">void</span> g_cond_free (<em class="parameter"><code><a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a> *cond</code></em>);</pre>
2590
- <p>
2591
- Destroys the <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>.
2592
- </p>
2593
- <div class="variablelist"><table border="0">
2594
- <col align="left" valign="top">
2595
- <tbody><tr>
2596
- <td><p><span class="term"><em class="parameter"><code>cond</code></em> :</span></p></td>
2597
- <td>a <a class="link" href="glib-Threads.html#GCond" title="GCond"><span class="type">GCond</span></a>.
2598
- </td>
2599
- </tr></tbody>
2600
- </table></div>
2601
- </div>
2602
- <hr>
2603
- <div class="refsect2">
2604
- <a name="GPrivate"></a><h3>GPrivate</h3>
2605
- <pre class="programlisting">typedef struct _GPrivate GPrivate;</pre>
2606
- <p>
2607
- The <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> struct is an opaque data structure to represent a
2608
- thread private data key. Threads can thereby obtain and set a
2609
- pointer which is private to the current thread. Take our
2610
- <code class="function">give_me_next_number()</code> example from
2611
- above. Suppose we don't want <code class="literal">current_number</code> to be
2612
- shared between the threads, but instead to be private to each thread.
2613
- This can be done as follows:
2614
- </p>
2615
- <p>
2616
- </p>
2617
- <div class="example">
2618
- <a name="id632863"></a><p class="title"><b>Example 9. Using GPrivate for per-thread data</b></p>
2619
- <div class="example-contents">
2620
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
2621
- <tbody>
2622
- <tr>
2623
- <td class="listing_lines" align="right"><pre>1
2624
- 2
2625
- 3
2626
- 4
2627
- 5
2628
- 6
2629
- 7
2630
- 8
2631
- 9
2632
- 10
2633
- 11
2634
- 12
2635
- 13
2636
- 14
2637
- 15
2638
- 16
2639
- 17
2640
- 18
2641
- 19</pre></td>
2642
- <td class="listing_code"><pre class="programlisting"><span class="normal"><a href="glib-Threads.html#GPrivate">GPrivate</a></span><span class="symbol">*</span><span class="normal"> current_number_key </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span><span class="normal"> </span><span class="comment">/* Must be initialized somewhere</span>
2643
- <span class="comment"> with g_private_new (g_free); */</span>
2644
-
2645
- <span class="type">int</span>
2646
- <span class="function">give_me_next_number</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
2647
- <span class="cbracket">{</span>
2648
- <span class="normal"> </span><span class="type">int</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-private-get">g_private_get</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number_key</span><span class="symbol">);</span>
2649
-
2650
- <span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">current_number</span><span class="symbol">)</span>
2651
- <span class="normal"> </span><span class="cbracket">{</span>
2652
- <span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Memory-Allocation.html#g-new">g_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">);</span>
2653
- <span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
2654
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-private-set">g_private_set</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">current_number_key</span><span class="symbol">,</span><span class="normal"> current_number</span><span class="symbol">);</span>
2655
- <span class="normal"> </span><span class="cbracket">}</span>
2656
-
2657
- <span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function">calc_next_number</span><span class="normal"> </span><span class="symbol">(*</span><span class="normal">current_number</span><span class="symbol">);</span>
2658
-
2659
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number</span><span class="symbol">;</span>
2660
- <span class="cbracket">}</span></pre></td>
2661
- </tr>
2662
- </tbody>
2663
- </table>
2664
- </div>
2665
-
2666
- </div>
2667
- <p><br class="example-break">
2668
- </p>
2669
- <p>
2670
- Here the pointer belonging to the key
2671
- <code class="literal">current_number_key</code> is read. If it is <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, it has
2672
- not been set yet. Then get memory for an integer value, assign this
2673
- memory to the pointer and write the pointer back. Now we have an
2674
- integer value that is private to the current thread.
2675
- </p>
2676
- <p>
2677
- The <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> struct should only be accessed via the following
2678
- functions.
2679
- </p>
2680
- <p>
2681
- </p>
2682
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2683
- <h3 class="title">Note</h3>
2684
- <p>All of the <code class="function">g_private_*</code> functions are
2685
- actually macros. Apart from taking their addresses, you can however
2686
- use them as if they were functions.</p>
2687
- </div>
2688
- <p>
2689
- </p>
2690
- </div>
2691
- <hr>
2692
- <div class="refsect2">
2693
- <a name="g-private-new"></a><h3>g_private_new ()</h3>
2694
- <pre class="programlisting"><a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="returnvalue">GPrivate</span></a>* g_private_new (<em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> destructor</code></em>);</pre>
2695
- <p>
2696
- Creates a new <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>. If <em class="parameter"><code>destructor</code></em> is non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, it is a
2697
- pointer to a destructor function. Whenever a thread ends and the
2698
- corresponding pointer keyed to this instance of <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> is
2699
- non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, the destructor is called with this pointer as the
2700
- argument.
2701
- </p>
2702
- <p>
2703
- </p>
2704
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2705
- <h3 class="title">Note</h3>
2706
- <p><em class="parameter"><code>destructor</code></em> is used quite differently from <em class="parameter"><code>notify</code></em> in
2707
- <a class="link" href="glib-Threads.html#g-static-private-set" title="g_static_private_set ()"><code class="function">g_static_private_set()</code></a>.</p>
2708
- </div>
2709
- <p>
2710
- </p>
2711
- <p>
2712
- </p>
2713
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2714
- <h3 class="title">Note</h3>
2715
- <p>A <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> can not be freed. Reuse it instead, if you
2716
- can, to avoid shortage, or use <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a>.</p>
2717
- </div>
2718
- <p>
2719
- </p>
2720
- <p>
2721
- </p>
2722
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2723
- <h3 class="title">Note</h3>
2724
- <p>This function will abort if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not been
2725
- called yet.</p>
2726
- </div>
2727
- <p>
2728
- </p>
2729
- <div class="variablelist"><table border="0">
2730
- <col align="left" valign="top">
2731
- <tbody>
2732
- <tr>
2733
- <td><p><span class="term"><em class="parameter"><code>destructor</code></em> :</span></p></td>
2734
- <td>a function to destroy the data keyed to <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> when
2735
- a thread ends.
2736
- </td>
2737
- </tr>
2738
- <tr>
2739
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2740
- <td>a new <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>.
2741
- </td>
2742
- </tr>
2743
- </tbody>
2744
- </table></div>
2745
- </div>
2746
- <hr>
2747
- <div class="refsect2">
2748
- <a name="g-private-get"></a><h3>g_private_get ()</h3>
2749
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> g_private_get (<em class="parameter"><code><a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> *private_key</code></em>);</pre>
2750
- <p>
2751
- Returns the pointer keyed to <em class="parameter"><code>private_key</code></em> for the current thread. If
2752
- <a class="link" href="glib-Threads.html#g-private-set" title="g_private_set ()"><code class="function">g_private_set()</code></a> hasn't been called for the current <em class="parameter"><code>private_key</code></em> and
2753
- thread yet, this pointer will be <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>.
2754
- </p>
2755
- <p>
2756
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
2757
- called, and, in that case, will return the value of <em class="parameter"><code>private_key</code></em>
2758
- casted to <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a>. Note however, that private data set
2759
- <span class="emphasis"><em>before</em></span> <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> will
2760
- <span class="emphasis"><em>not</em></span> be retained <span class="emphasis"><em>after</em></span> the
2761
- call. Instead, <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> will be returned in all threads directly after
2762
- <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>, regardless of any <a class="link" href="glib-Threads.html#g-private-set" title="g_private_set ()"><code class="function">g_private_set()</code></a> calls issued
2763
- before threading system intialization.
2764
- </p>
2765
- <div class="variablelist"><table border="0">
2766
- <col align="left" valign="top">
2767
- <tbody>
2768
- <tr>
2769
- <td><p><span class="term"><em class="parameter"><code>private_key</code></em> :</span></p></td>
2770
- <td>a <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>.
2771
- </td>
2772
- </tr>
2773
- <tr>
2774
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2775
- <td>the corresponding pointer.
2776
- </td>
2777
- </tr>
2778
- </tbody>
2779
- </table></div>
2780
- </div>
2781
- <hr>
2782
- <div class="refsect2">
2783
- <a name="g-private-set"></a><h3>g_private_set ()</h3>
2784
- <pre class="programlisting"><span class="returnvalue">void</span> g_private_set (<em class="parameter"><code><a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a> *private_key</code></em>,
2785
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
2786
- <p>
2787
- Sets the pointer keyed to <em class="parameter"><code>private_key</code></em> for the current thread.
2788
- </p>
2789
- <p>
2790
- This function can be used even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been
2791
- called, and, in that case, will set <em class="parameter"><code>private_key</code></em> to <em class="parameter"><code>data</code></em> casted to
2792
- <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>*. See <a class="link" href="glib-Threads.html#g-private-get" title="g_private_get ()"><code class="function">g_private_get()</code></a> for resulting caveats.
2793
- </p>
2794
- <div class="variablelist"><table border="0">
2795
- <col align="left" valign="top">
2796
- <tbody>
2797
- <tr>
2798
- <td><p><span class="term"><em class="parameter"><code>private_key</code></em> :</span></p></td>
2799
- <td>a <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>.
2800
- </td>
2801
- </tr>
2802
- <tr>
2803
- <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
2804
- <td>the new pointer.
2805
- </td>
2806
- </tr>
2807
- </tbody>
2808
- </table></div>
2809
- </div>
2810
- <hr>
2811
- <div class="refsect2">
2812
- <a name="GStaticPrivate"></a><h3>GStaticPrivate</h3>
2813
- <pre class="programlisting">typedef struct {
2814
- } GStaticPrivate;
2815
- </pre>
2816
- <p>
2817
- A <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> works almost like a <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>, but it has one
2818
- significant advantage. It doesn't need to be created at run-time
2819
- like a <a class="link" href="glib-Threads.html#GPrivate" title="GPrivate"><span class="type">GPrivate</span></a>, but can be defined at compile-time. This is
2820
- similar to the difference between <a class="link" href="glib-Threads.html#GMutex" title="GMutex"><span class="type">GMutex</span></a> and <a class="link" href="glib-Threads.html#GStaticMutex" title="GStaticMutex"><span class="type">GStaticMutex</span></a>. Now
2821
- look at our <code class="function"><code class="function">give_me_next_number()</code></code> example with
2822
- <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a>:
2823
- </p>
2824
- <p>
2825
- </p>
2826
- <div class="example">
2827
- <a name="id633631"></a><p class="title"><b>Example 10. Using GStaticPrivate for per-thread data</b></p>
2828
- <div class="example-contents">
2829
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
2830
- <tbody>
2831
- <tr>
2832
- <td class="listing_lines" align="right"><pre>1
2833
- 2
2834
- 3
2835
- 4
2836
- 5
2837
- 6
2838
- 7
2839
- 8
2840
- 9
2841
- 10
2842
- 11
2843
- 12
2844
- 13
2845
- 14
2846
- 15
2847
- 16
2848
- 17</pre></td>
2849
- <td class="listing_code"><pre class="programlisting"><span class="type">int</span>
2850
- <span class="function">give_me_next_number</span><span class="normal"> </span><span class="symbol">()</span>
2851
- <span class="cbracket">{</span>
2852
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="usertype">GStaticPrivate</span><span class="normal"> current_number_key </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-STATIC-PRIVATE-INIT:CAPS">G_STATIC_PRIVATE_INIT</a></span><span class="symbol">;</span>
2853
- <span class="normal"> </span><span class="type">int</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-private-get">g_static_private_get</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">current_number_key</span><span class="symbol">);</span>
2854
-
2855
- <span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">current_number</span><span class="symbol">)</span>
2856
- <span class="normal"> </span><span class="cbracket">{</span>
2857
- <span class="normal"> current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Memory-Allocation.html#g-new">g_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="symbol">,</span><span class="number">1</span><span class="symbol">);</span>
2858
- <span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
2859
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-static-private-set">g_static_private_set</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">current_number_key</span><span class="symbol">,</span><span class="normal"> current_number</span><span class="symbol">,</span><span class="normal"> <a href="glib-Memory-Allocation.html#g-free">g_free</a></span><span class="symbol">);</span>
2860
- <span class="normal"> </span><span class="cbracket">}</span>
2861
-
2862
- <span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number </span><span class="symbol">=</span><span class="normal"> </span><span class="function">calc_next_number</span><span class="normal"> </span><span class="symbol">(*</span><span class="normal">current_number</span><span class="symbol">);</span>
2863
-
2864
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">current_number</span><span class="symbol">;</span>
2865
- <span class="cbracket">}</span></pre></td>
2866
- </tr>
2867
- </tbody>
2868
- </table>
2869
- </div>
2870
-
2871
- </div>
2872
- <p><br class="example-break">
2873
- </p>
2874
- </div>
2875
- <hr>
2876
- <div class="refsect2">
2877
- <a name="G-STATIC-PRIVATE-INIT:CAPS"></a><h3>G_STATIC_PRIVATE_INIT</h3>
2878
- <pre class="programlisting">#define G_STATIC_PRIVATE_INIT
2879
- </pre>
2880
- <p>
2881
- Every <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> must be initialized with this macro, before it
2882
- can be used.
2883
- </p>
2884
- <p>
2885
- </p>
2886
- <div class="informalexample">
2887
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
2888
- <tbody>
2889
- <tr>
2890
- <td class="listing_lines" align="right"><pre>1</pre></td>
2891
- <td class="listing_code"><pre class="programlisting"><span class="usertype">GStaticPrivate</span><span class="normal"> my_private </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-STATIC-PRIVATE-INIT:CAPS">G_STATIC_PRIVATE_INIT</a></span><span class="symbol">;</span></pre></td>
2892
- </tr>
2893
- </tbody>
2894
- </table>
2895
- </div>
2896
-
2897
- <p>
2898
- </p>
2899
- </div>
2900
- <hr>
2901
- <div class="refsect2">
2902
- <a name="g-static-private-init"></a><h3>g_static_private_init ()</h3>
2903
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_private_init (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>);</pre>
2904
- <p>
2905
- Initializes <em class="parameter"><code>private_key</code></em>. Alternatively you can initialize it with
2906
- <a class="link" href="glib-Threads.html#G-STATIC-PRIVATE-INIT:CAPS" title="G_STATIC_PRIVATE_INIT"><span class="type">G_STATIC_PRIVATE_INIT</span></a>.
2907
- </p>
2908
- <div class="variablelist"><table border="0">
2909
- <col align="left" valign="top">
2910
- <tbody><tr>
2911
- <td><p><span class="term"><em class="parameter"><code>private_key</code></em> :</span></p></td>
2912
- <td>a <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> to be initialized.
2913
- </td>
2914
- </tr></tbody>
2915
- </table></div>
2916
- </div>
2917
- <hr>
2918
- <div class="refsect2">
2919
- <a name="g-static-private-get"></a><h3>g_static_private_get ()</h3>
2920
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> g_static_private_get (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>);</pre>
2921
- <p>
2922
- Works like <a class="link" href="glib-Threads.html#g-private-get" title="g_private_get ()"><code class="function">g_private_get()</code></a> only for a <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a>.
2923
- </p>
2924
- <p>
2925
- This function works even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been called.
2926
- </p>
2927
- <div class="variablelist"><table border="0">
2928
- <col align="left" valign="top">
2929
- <tbody>
2930
- <tr>
2931
- <td><p><span class="term"><em class="parameter"><code>private_key</code></em> :</span></p></td>
2932
- <td>a <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a>.
2933
- </td>
2934
- </tr>
2935
- <tr>
2936
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2937
- <td>the corresponding pointer.
2938
- </td>
2939
- </tr>
2940
- </tbody>
2941
- </table></div>
2942
- </div>
2943
- <hr>
2944
- <div class="refsect2">
2945
- <a name="g-static-private-set"></a><h3>g_static_private_set ()</h3>
2946
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_private_set (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>,
2947
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
2948
- <em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
2949
- <p>
2950
- Sets the pointer keyed to <em class="parameter"><code>private_key</code></em> for the current thread and
2951
- the function <em class="parameter"><code>notify</code></em> to be called with that pointer (<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> or
2952
- non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>), whenever the pointer is set again or whenever the
2953
- current thread ends.
2954
- </p>
2955
- <p>
2956
- This function works even if <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> has not yet been called.
2957
- If <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a> is called later, the <em class="parameter"><code>data</code></em> keyed to <em class="parameter"><code>private_key</code></em>
2958
- will be inherited only by the main thread, i.e. the one that called
2959
- <a class="link" href="glib-Threads.html#g-thread-init" title="g_thread_init ()"><code class="function">g_thread_init()</code></a>.
2960
- </p>
2961
- <p>
2962
- </p>
2963
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2964
- <h3 class="title">Note</h3>
2965
- <p><em class="parameter"><code>notify</code></em> is used quite differently from <em class="parameter"><code>destructor</code></em> in
2966
- <a class="link" href="glib-Threads.html#g-private-new" title="g_private_new ()"><code class="function">g_private_new()</code></a>.</p>
2967
- </div>
2968
- <p>
2969
- </p>
2970
- <div class="variablelist"><table border="0">
2971
- <col align="left" valign="top">
2972
- <tbody>
2973
- <tr>
2974
- <td><p><span class="term"><em class="parameter"><code>private_key</code></em> :</span></p></td>
2975
- <td>a <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a>.
2976
- </td>
2977
- </tr>
2978
- <tr>
2979
- <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
2980
- <td>the new pointer.
2981
- </td>
2982
- </tr>
2983
- <tr>
2984
- <td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
2985
- <td>a function to be called with the pointer whenever the
2986
- current thread ends or sets this pointer again.
2987
- </td>
2988
- </tr>
2989
- </tbody>
2990
- </table></div>
2991
- </div>
2992
- <hr>
2993
- <div class="refsect2">
2994
- <a name="g-static-private-free"></a><h3>g_static_private_free ()</h3>
2995
- <pre class="programlisting"><span class="returnvalue">void</span> g_static_private_free (<em class="parameter"><code><a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> *private_key</code></em>);</pre>
2996
- <p>
2997
- Releases all resources allocated to <em class="parameter"><code>private_key</code></em>.
2998
- </p>
2999
- <p>
3000
- You don't have to call this functions for a <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> with an
3001
- unbounded lifetime, i.e. objects declared 'static', but if you have
3002
- a <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> as a member of a structure and the structure is
3003
- freed, you should also free the <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a>.
3004
- </p>
3005
- <div class="variablelist"><table border="0">
3006
- <col align="left" valign="top">
3007
- <tbody><tr>
3008
- <td><p><span class="term"><em class="parameter"><code>private_key</code></em> :</span></p></td>
3009
- <td>a <a class="link" href="glib-Threads.html#GStaticPrivate" title="GStaticPrivate"><span class="type">GStaticPrivate</span></a> to be freed.
3010
- </td>
3011
- </tr></tbody>
3012
- </table></div>
3013
- </div>
3014
- <hr>
3015
- <div class="refsect2">
3016
- <a name="GOnce"></a><h3>GOnce</h3>
3017
- <pre class="programlisting">typedef struct {
3018
- volatile GOnceStatus status;
3019
- volatile gpointer retval;
3020
- } GOnce;
3021
- </pre>
3022
- <p>
3023
- A <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a> struct controls a one-time initialization function. Any
3024
- one-time initialization function must have its own unique <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a>
3025
- struct.
3026
- </p>
3027
- <div class="variablelist"><table border="0">
3028
- <col align="left" valign="top">
3029
- <tbody>
3030
- <tr>
3031
- <td><p><span class="term">volatile <a class="link" href="glib-Threads.html#GOnceStatus" title="enum GOnceStatus"><span class="type">GOnceStatus</span></a> <em class="structfield"><code><a name="GOnce.status"></a>status</code></em>;</span></p></td>
3032
- <td>the status of the <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a>
3033
- </td>
3034
- </tr>
3035
- <tr>
3036
- <td><p><span class="term">volatile <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GOnce.retval"></a>retval</code></em>;</span></p></td>
3037
- <td>the value returned by the call to the function, if <em class="parameter"><code>status</code></em>
3038
- is <a class="link" href="glib-Threads.html#G-ONCE-STATUS-READY:CAPS"><code class="literal">G_ONCE_STATUS_READY</code></a>
3039
- </td>
3040
- </tr>
3041
- </tbody>
3042
- </table></div>
3043
- <p class="since">Since 2.4</p>
3044
- </div>
3045
- <hr>
3046
- <div class="refsect2">
3047
- <a name="GOnceStatus"></a><h3>enum GOnceStatus</h3>
3048
- <pre class="programlisting">typedef enum
3049
- {
3050
- G_ONCE_STATUS_NOTCALLED,
3051
- G_ONCE_STATUS_PROGRESS,
3052
- G_ONCE_STATUS_READY
3053
- } GOnceStatus;
3054
- </pre>
3055
- <p>
3056
- The possible statuses of a one-time initialization function
3057
- controlled by a <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a> struct.
3058
- </p>
3059
- <div class="variablelist"><table border="0">
3060
- <col align="left" valign="top">
3061
- <tbody>
3062
- <tr>
3063
- <td><p><a name="G-ONCE-STATUS-NOTCALLED:CAPS"></a><span class="term"><code class="literal">G_ONCE_STATUS_NOTCALLED</code></span></p></td>
3064
- <td>the function has not been called yet.
3065
- </td>
3066
- </tr>
3067
- <tr>
3068
- <td><p><a name="G-ONCE-STATUS-PROGRESS:CAPS"></a><span class="term"><code class="literal">G_ONCE_STATUS_PROGRESS</code></span></p></td>
3069
- <td>the function call is currently in progress.
3070
- </td>
3071
- </tr>
3072
- <tr>
3073
- <td><p><a name="G-ONCE-STATUS-READY:CAPS"></a><span class="term"><code class="literal">G_ONCE_STATUS_READY</code></span></p></td>
3074
- <td>the function has been called.
3075
- </td>
3076
- </tr>
3077
- </tbody>
3078
- </table></div>
3079
- <p class="since">Since 2.4</p>
3080
- </div>
3081
- <hr>
3082
- <div class="refsect2">
3083
- <a name="G-ONCE-INIT:CAPS"></a><h3>G_ONCE_INIT</h3>
3084
- <pre class="programlisting">#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
3085
- </pre>
3086
- <p>
3087
- A <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a> must be initialized with this macro before it can be used.
3088
- </p>
3089
- <p>
3090
- </p>
3091
- <div class="informalexample">
3092
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
3093
- <tbody>
3094
- <tr>
3095
- <td class="listing_lines" align="right"><pre>1</pre></td>
3096
- <td class="listing_code"><pre class="programlisting"><span class="usertype">GOnce</span><span class="normal"> my_once </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-ONCE-INIT:CAPS">G_ONCE_INIT</a></span><span class="symbol">;</span></pre></td>
3097
- </tr>
3098
- </tbody>
3099
- </table>
3100
- </div>
3101
-
3102
- <p>
3103
- </p>
3104
- <p class="since">Since 2.4</p>
3105
- </div>
3106
- <hr>
3107
- <div class="refsect2">
3108
- <a name="g-once"></a><h3>g_once()</h3>
3109
- <pre class="programlisting">#define g_once(once, func, arg)</pre>
3110
- <p>
3111
- The first call to this routine by a process with a given <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a>
3112
- struct calls <em class="parameter"><code>func</code></em> with the given argument. Thereafter, subsequent
3113
- calls to <a class="link" href="glib-Threads.html#g-once" title="g_once()"><code class="function">g_once()</code></a> with the same <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a> struct do not call <em class="parameter"><code>func</code></em>
3114
- again, but return the stored result of the first call. On return
3115
- from <a class="link" href="glib-Threads.html#g-once" title="g_once()"><code class="function">g_once()</code></a>, the status of <em class="parameter"><code>once</code></em> will be <a class="link" href="glib-Threads.html#G-ONCE-STATUS-READY:CAPS"><code class="literal">G_ONCE_STATUS_READY</code></a>.
3116
- </p>
3117
- <p>
3118
- For example, a mutex or a thread-specific data key must be created
3119
- exactly once. In a threaded environment, calling <a class="link" href="glib-Threads.html#g-once" title="g_once()"><code class="function">g_once()</code></a> ensures
3120
- that the initialization is serialized across multiple threads.
3121
- </p>
3122
- <p>
3123
- </p>
3124
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
3125
- <h3 class="title">Note</h3>
3126
- <p>Calling <a class="link" href="glib-Threads.html#g-once" title="g_once()"><code class="function">g_once()</code></a> recursively on the same <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a> struct in
3127
- <em class="parameter"><code>func</code></em> will lead to a deadlock.</p>
3128
- </div>
3129
- <p>
3130
- </p>
3131
- <p>
3132
- </p>
3133
- <div class="informalexample">
3134
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
3135
- <tbody>
3136
- <tr>
3137
- <td class="listing_lines" align="right"><pre>1
3138
- 2
3139
- 3
3140
- 4
3141
- 5
3142
- 6
3143
- 7
3144
- 8
3145
- 9</pre></td>
3146
- <td class="listing_code"><pre class="programlisting"><span class="normal"><a href="glib-Basic-Types.html#gpointer">gpointer</a></span>
3147
- <span class="function">get_debug_flags</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
3148
- <span class="cbracket">{</span>
3149
- <span class="normal"> </span><span class="keyword">static</span><span class="normal"> </span><span class="usertype">GOnce</span><span class="normal"> my_once </span><span class="symbol">=</span><span class="normal"> <a href="glib-Threads.html#G-ONCE-INIT:CAPS">G_ONCE_INIT</a></span><span class="symbol">;</span>
3150
-
3151
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-once">g_once</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">my_once</span><span class="symbol">,</span><span class="normal"> parse_debug_flags</span><span class="symbol">,</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
3152
-
3153
- <span class="normal"> </span><span class="keyword">return</span><span class="normal"> my_once</span><span class="symbol">.</span><span class="normal">retval</span><span class="symbol">;</span>
3154
- <span class="cbracket">}</span></pre></td>
3155
- </tr>
3156
- </tbody>
3157
- </table>
3158
- </div>
3159
-
3160
- <p>
3161
- </p>
3162
- <div class="variablelist"><table border="0">
3163
- <col align="left" valign="top">
3164
- <tbody>
3165
- <tr>
3166
- <td><p><span class="term"><em class="parameter"><code>once</code></em> :</span></p></td>
3167
- <td>a <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a> structure
3168
- </td>
3169
- </tr>
3170
- <tr>
3171
- <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
3172
- <td>the <a class="link" href="glib-Threads.html#GThreadFunc" title="GThreadFunc ()"><span class="type">GThreadFunc</span></a> function associated to <em class="parameter"><code>once</code></em>. This function
3173
- is called only once, regardless of the number of times it and
3174
- its associated <a class="link" href="glib-Threads.html#GOnce" title="GOnce"><span class="type">GOnce</span></a> struct are passed to <a class="link" href="glib-Threads.html#g-once" title="g_once()"><code class="function">g_once()</code></a>.
3175
- </td>
3176
- </tr>
3177
- <tr>
3178
- <td><p><span class="term"><em class="parameter"><code>arg</code></em> :</span></p></td>
3179
- <td>data to be passed to <em class="parameter"><code>func</code></em>
3180
- </td>
3181
- </tr>
3182
- </tbody>
3183
- </table></div>
3184
- <p class="since">Since 2.4</p>
3185
- </div>
3186
- <hr>
3187
- <div class="refsect2">
3188
- <a name="g-once-init-enter"></a><h3>g_once_init_enter ()</h3>
3189
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_once_init_enter (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> *value_location</code></em>);</pre>
3190
- <p>
3191
- Function to be called when starting a critical initialization
3192
- section. The argument <em class="parameter"><code>value_location</code></em> must point to a static
3193
- 0-initialized variable that will be set to a value other than 0 at
3194
- the end of the initialization section. In combination with
3195
- <a class="link" href="glib-Threads.html#g-once-init-leave" title="g_once_init_leave ()"><code class="function">g_once_init_leave()</code></a> and the unique address <em class="parameter"><code>value_location</code></em>, it can
3196
- be ensured that an initialization section will be executed only once
3197
- during a program's life time, and that concurrent threads are
3198
- blocked until initialization completed. To be used in constructs
3199
- like this:
3200
- </p>
3201
- <p>
3202
- </p>
3203
- <div class="informalexample">
3204
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
3205
- <tbody>
3206
- <tr>
3207
- <td class="listing_lines" align="right"><pre>1
3208
- 2
3209
- 3
3210
- 4
3211
- 5
3212
- 6
3213
- 7
3214
- 8
3215
- 9
3216
- 10</pre></td>
3217
- <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="usertype">gsize</span><span class="normal"> initialization_value </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
3218
-
3219
- <span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="glib-Threads.html#g-once-init-enter">g_once_init_enter</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">initialization_value</span><span class="symbol">))</span>
3220
- <span class="normal"> </span><span class="cbracket">{</span>
3221
- <span class="normal"> </span><span class="usertype">gsize</span><span class="normal"> setup_value </span><span class="symbol">=</span><span class="normal"> </span><span class="number">42</span><span class="symbol">;</span><span class="normal"> </span><span class="comment">/* initialization code here */</span>
3222
-
3223
- <span class="normal"> </span><span class="function"><a href="glib-Threads.html#g-once-init-leave">g_once_init_leave</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">initialization_value</span><span class="symbol">,</span><span class="normal"> setup_value</span><span class="symbol">);</span>
3224
- <span class="normal"> </span><span class="cbracket">}</span>
3225
-
3226
- <span class="comment">/* use initialization_value here */</span></pre></td>
3227
- </tr>
3228
- </tbody>
3229
- </table>
3230
- </div>
3231
-
3232
- <p>
3233
- </p>
3234
- <div class="variablelist"><table border="0">
3235
- <col align="left" valign="top">
3236
- <tbody>
3237
- <tr>
3238
- <td><p><span class="term"><em class="parameter"><code>value_location</code></em> :</span></p></td>
3239
- <td>location of a static initializable variable
3240
- containing 0.
3241
- </td>
3242
- </tr>
3243
- <tr>
3244
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
3245
- <td>
3246
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if the initialization section should be entered,
3247
- <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> and blocks otherwise
3248
- </td>
3249
- </tr>
3250
- </tbody>
3251
- </table></div>
3252
- <p class="since">Since 2.14</p>
3253
- </div>
3254
- <hr>
3255
- <div class="refsect2">
3256
- <a name="g-once-init-leave"></a><h3>g_once_init_leave ()</h3>
3257
- <pre class="programlisting"><span class="returnvalue">void</span> g_once_init_leave (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> *value_location</code></em>,
3258
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> initialization_value</code></em>);</pre>
3259
- <p>
3260
- Counterpart to <a class="link" href="glib-Threads.html#g-once-init-enter" title="g_once_init_enter ()"><code class="function">g_once_init_enter()</code></a>. Expects a location of a static
3261
- 0-initialized initialization variable, and an initialization value
3262
- other than 0. Sets the variable to the initialization value, and
3263
- releases concurrent threads blocking in <a class="link" href="glib-Threads.html#g-once-init-enter" title="g_once_init_enter ()"><code class="function">g_once_init_enter()</code></a> on this
3264
- initialization variable.
3265
- </p>
3266
- <div class="variablelist"><table border="0">
3267
- <col align="left" valign="top">
3268
- <tbody>
3269
- <tr>
3270
- <td><p><span class="term"><em class="parameter"><code>value_location</code></em> :</span></p></td>
3271
- <td>location of a static initializable variable
3272
- containing 0.
3273
- </td>
3274
- </tr>
3275
- <tr>
3276
- <td><p><span class="term"><em class="parameter"><code>initialization_value</code></em> :</span></p></td>
3277
- <td>new non-0 value for *<em class="parameter"><code>value_location</code></em>.
3278
- </td>
3279
- </tr>
3280
- </tbody>
3281
- </table></div>
3282
- <p class="since">Since 2.14</p>
3283
- </div>
3284
- <hr>
3285
- <div class="refsect2">
3286
- <a name="g-bit-lock"></a><h3>g_bit_lock ()</h3>
3287
- <pre class="programlisting"><span class="returnvalue">void</span> g_bit_lock (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> *address</code></em>,
3288
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> lock_bit</code></em>);</pre>
3289
- <p>
3290
- Sets the indicated <em class="parameter"><code>lock_bit</code></em> in <em class="parameter"><code>address</code></em>. If the bit is already
3291
- set, this call will block until <a class="link" href="glib-Threads.html#g-bit-unlock" title="g_bit_unlock ()"><code class="function">g_bit_unlock()</code></a> unsets the
3292
- corresponding bit.
3293
- </p>
3294
- <p>
3295
- Attempting to lock on two different bits within the same integer is
3296
- not supported and will very probably cause deadlocks.
3297
- </p>
3298
- <p>
3299
- The value of the bit that is set is (1u &lt;&lt; <em class="parameter"><code>bit</code></em>). If <em class="parameter"><code>bit</code></em> is not
3300
- between 0 and 31 then the result is undefined.
3301
- </p>
3302
- <p>
3303
- This function accesses <em class="parameter"><code>address</code></em> atomically. All other accesses to
3304
- <em class="parameter"><code>address</code></em> must be atomic in order for this function to work
3305
- reliably.
3306
- </p>
3307
- <div class="variablelist"><table border="0">
3308
- <col align="left" valign="top">
3309
- <tbody>
3310
- <tr>
3311
- <td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
3312
- <td>a pointer to an integer
3313
- </td>
3314
- </tr>
3315
- <tr>
3316
- <td><p><span class="term"><em class="parameter"><code>lock_bit</code></em> :</span></p></td>
3317
- <td>a bit value between 0 and 31
3318
- </td>
3319
- </tr>
3320
- </tbody>
3321
- </table></div>
3322
- <p class="since">Since 2.24</p>
3323
- </div>
3324
- <hr>
3325
- <div class="refsect2">
3326
- <a name="g-bit-trylock"></a><h3>g_bit_trylock ()</h3>
3327
- <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_bit_trylock (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> *address</code></em>,
3328
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> lock_bit</code></em>);</pre>
3329
- <p>
3330
- Sets the indicated <em class="parameter"><code>lock_bit</code></em> in <em class="parameter"><code>address</code></em>, returning <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if
3331
- successful. If the bit is already set, returns <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> immediately.
3332
- </p>
3333
- <p>
3334
- Attempting to lock on two different bits within the same integer is
3335
- not supported.
3336
- </p>
3337
- <p>
3338
- The value of the bit that is set is (1u &lt;&lt; <em class="parameter"><code>bit</code></em>). If <em class="parameter"><code>bit</code></em> is not
3339
- between 0 and 31 then the result is undefined.
3340
- </p>
3341
- <p>
3342
- This function accesses <em class="parameter"><code>address</code></em> atomically. All other accesses to
3343
- <em class="parameter"><code>address</code></em> must be atomic in order for this function to work
3344
- reliably.
3345
- </p>
3346
- <div class="variablelist"><table border="0">
3347
- <col align="left" valign="top">
3348
- <tbody>
3349
- <tr>
3350
- <td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
3351
- <td>a pointer to an integer
3352
- </td>
3353
- </tr>
3354
- <tr>
3355
- <td><p><span class="term"><em class="parameter"><code>lock_bit</code></em> :</span></p></td>
3356
- <td>a bit value between 0 and 31
3357
- </td>
3358
- </tr>
3359
- <tr>
3360
- <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
3361
- <td>
3362
- <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if the lock was acquired
3363
- </td>
3364
- </tr>
3365
- </tbody>
3366
- </table></div>
3367
- <p class="since">Since 2.24</p>
3368
- </div>
3369
- <hr>
3370
- <div class="refsect2">
3371
- <a name="g-bit-unlock"></a><h3>g_bit_unlock ()</h3>
3372
- <pre class="programlisting"><span class="returnvalue">void</span> g_bit_unlock (<em class="parameter"><code>volatile <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> *address</code></em>,
3373
- <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="type">gint</span></a> lock_bit</code></em>);</pre>
3374
- <p>
3375
- Clears the indicated <em class="parameter"><code>lock_bit</code></em> in <em class="parameter"><code>address</code></em>. If another thread is
3376
- currently blocked in <a class="link" href="glib-Threads.html#g-bit-lock" title="g_bit_lock ()"><code class="function">g_bit_lock()</code></a> on this same bit then it will be
3377
- woken up.
3378
- </p>
3379
- <p>
3380
- This function accesses <em class="parameter"><code>address</code></em> atomically. All other accesses to
3381
- <em class="parameter"><code>address</code></em> must be atomic in order for this function to work
3382
- reliably.
3383
- </p>
3384
- <div class="variablelist"><table border="0">
3385
- <col align="left" valign="top">
3386
- <tbody>
3387
- <tr>
3388
- <td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
3389
- <td>a pointer to an integer
3390
- </td>
3391
- </tr>
3392
- <tr>
3393
- <td><p><span class="term"><em class="parameter"><code>lock_bit</code></em> :</span></p></td>
3394
- <td>a bit value between 0 and 31
3395
- </td>
3396
- </tr>
3397
- </tbody>
3398
- </table></div>
3399
- <p class="since">Since 2.24</p>
3400
- </div>
3401
- </div>
3402
- <div class="refsect1">
3403
- <a name="glib-Threads.see-also"></a><h2>See Also</h2>
3404
- <a class="link" href="glib-Thread-Pools.html#GThreadPool" title="GThreadPool"><span class="type">GThreadPool</span></a>, <a class="link" href="glib-Asynchronous-Queues.html#GAsyncQueue" title="GAsyncQueue"><span class="type">GAsyncQueue</span></a>
3405
- </div>
3406
- </div>
3407
- <div class="footer">
3408
- <hr>
3409
- Generated by GTK-Doc V1.15.1</div>
3410
- </body>
3411
- </html>