<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.6"/> <title>createrepo_c library: Useful thread function to use in GThreadPool.</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="navtree.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="resize.js"></script> <script type="text/javascript" src="navtree.js"></script> <script type="text/javascript"> $(document).ready(initResizable); $(window).load(resizeHeight); </script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">createrepo_c library  <span id="projectnumber">0.7.4</span> </div> <div id="projectbrief">C library for metadata manipulation</div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> <img id="MSearchSelect" src="search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/> <input type="text" id="MSearchField" value="Search" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> </span><span class="right"> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> </span> </div> </li> </ul> </div> </div><!-- top --> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> <div id="nav-sync" class="sync"></div> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> $(document).ready(function(){initNavTree('group__threads.html','');}); </script> <div id="doc-content"> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <div class="header"> <div class="summary"> <a href="#nested-classes">Data Structures</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Useful thread function to use in GThreadPool.</div> </div> </div><!--header--> <div class="contents"> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Data Structures</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcr___compression_task.html">cr_CompressionTask</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:ga0b2998f915c4354fa4689ebf2b59bd12"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structcr___compression_task.html">cr_CompressionTask</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ga0b2998f915c4354fa4689ebf2b59bd12">cr_compressiontask_new</a> (const char *src, const char *dst, <a class="el" href="group__compression__wrapper.html#gac218acbb5e4b319304fc74e5448a2214">cr_CompressionType</a> compression_type, <a class="el" href="group__checksum.html#ga36a5d391d81917afca751eb71514f2cf">cr_ChecksumType</a> checksum_type, int delsrc, GError **err)</td></tr> <tr class="separator:ga0b2998f915c4354fa4689ebf2b59bd12"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga1130b825ed5d9a40cbad5120e0f6d8c0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ga1130b825ed5d9a40cbad5120e0f6d8c0">cr_compressiontask_free</a> (<a class="el" href="structcr___compression_task.html">cr_CompressionTask</a> *task, GError **err)</td></tr> <tr class="separator:ga1130b825ed5d9a40cbad5120e0f6d8c0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa3e4b90ef408831b44bbd93c3b9e04b4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#gaa3e4b90ef408831b44bbd93c3b9e04b4">cr_compressing_thread</a> (gpointer data, gpointer user_data)</td></tr> <tr class="separator:gaa3e4b90ef408831b44bbd93c3b9e04b4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga285e161887d250a5f8cd98af93d2ff60"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ga285e161887d250a5f8cd98af93d2ff60">cr_repomdrecordfilltask_new</a> (<a class="el" href="structcr___repomd_record.html">cr_RepomdRecord</a> *record, <a class="el" href="group__checksum.html#ga36a5d391d81917afca751eb71514f2cf">cr_ChecksumType</a> checksum_type, GError **err)</td></tr> <tr class="separator:ga285e161887d250a5f8cd98af93d2ff60"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gae55faf77725052d0d2ea91bd2dae272d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#gae55faf77725052d0d2ea91bd2dae272d">cr_repomdrecordfilltask_free</a> (<a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a> *task, GError **err)</td></tr> <tr class="separator:gae55faf77725052d0d2ea91bd2dae272d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga90ed36889e6d93f9a2648b9ba765c152"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ga90ed36889e6d93f9a2648b9ba765c152">cr_repomd_record_fill_thread</a> (gpointer data, gpointer user_data)</td></tr> <tr class="separator:ga90ed36889e6d93f9a2648b9ba765c152"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>Paralelized compression example: </p> <div class="fragment"><div class="line"><a class="code" href="structcr___compression_task.html">cr_CompressionTask</a> *task_1, *task_2;</div> <div class="line">GThreadPool *pool;</div> <div class="line"></div> <div class="line"><span class="comment">// Prepare tasks</span></div> <div class="line">task_1 = <a class="code" href="group__threads.html#ga0b2998f915c4354fa4689ebf2b59bd12">cr_compressiontask_new</a>(<span class="stringliteral">"foo"</span>, <span class="stringliteral">"foo.gz"</span>, <a class="code" href="group__compression__wrapper.html#ggac218acbb5e4b319304fc74e5448a2214af3691bf6cf44970764d8d4cb2f339a9a">CR_CW_GZ_COMPRESSION</a>, 1,</div> <div class="line"> <a class="code" href="group__checksum.html#gga36a5d391d81917afca751eb71514f2cfaf295572a343c09092a0f1d18dc954b8f">CR_CHECKSUM_SHA256</a>, NULL);</div> <div class="line">task_2 = <a class="code" href="group__threads.html#ga0b2998f915c4354fa4689ebf2b59bd12">cr_compressiontask_new</a>(<span class="stringliteral">"bar"</span>, <span class="stringliteral">"bar.gz"</span>, <a class="code" href="group__compression__wrapper.html#ggac218acbb5e4b319304fc74e5448a2214af3691bf6cf44970764d8d4cb2f339a9a">CR_CW_GZ_COMPRESSION</a>, 1,</div> <div class="line"> <a class="code" href="group__checksum.html#gga36a5d391d81917afca751eb71514f2cfaa29895fbb702cb7feb9b4333f02e2e5d">CR_CHECKSUM_SHA512</a>, NULL);</div> <div class="line"></div> <div class="line"><span class="comment">// Create pool for tasks</span></div> <div class="line">pool = g_thread_pool_new(<a class="code" href="group__threads.html#gaa3e4b90ef408831b44bbd93c3b9e04b4">cr_compressing_thread</a>, NULL, 2, FALSE, NULL);</div> <div class="line"></div> <div class="line"><span class="comment">// Push tasks to the pool</span></div> <div class="line">g_thread_pool_push(pool, task_1, NULL);</div> <div class="line">g_thread_pool_push(pool, task_2, NULL);</div> <div class="line"></div> <div class="line"><span class="comment">// Wait until both treats finish and free the pool.</span></div> <div class="line">g_thread_pool_free(pool, FALSE, TRUE);</div> <div class="line"></div> <div class="line"><span class="comment">// Use results</span></div> <div class="line"><span class="comment">// Do whatever you want or need to do</span></div> <div class="line"></div> <div class="line"><span class="comment">// Clean up</span></div> <div class="line"><a class="code" href="group__threads.html#ga1130b825ed5d9a40cbad5120e0f6d8c0">cr_compressiontask_free</a>(task_1, NULL);</div> <div class="line"><a class="code" href="group__threads.html#ga1130b825ed5d9a40cbad5120e0f6d8c0">cr_compressiontask_free</a>(task_2, NULL);</div> </div><!-- fragment --> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="gaa3e4b90ef408831b44bbd93c3b9e04b4"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_compressing_thread </td> <td>(</td> <td class="paramtype">gpointer </td> <td class="paramname"><em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">gpointer </td> <td class="paramname"><em>user_data</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Function for GThreadPool. </p> </div> </div> <a class="anchor" id="ga1130b825ed5d9a40cbad5120e0f6d8c0"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_compressiontask_free </td> <td>(</td> <td class="paramtype"><a class="el" href="structcr___compression_task.html">cr_CompressionTask</a> * </td> <td class="paramname"><em>task</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Frees <a class="el" href="structcr___compression_task.html">cr_CompressionTask</a> and all its components. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">task</td><td><a class="el" href="structcr___compression_task.html">cr_CompressionTask</a> task </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga0b2998f915c4354fa4689ebf2b59bd12"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structcr___compression_task.html">cr_CompressionTask</a>* cr_compressiontask_new </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>src</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>dst</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__compression__wrapper.html#gac218acbb5e4b319304fc74e5448a2214">cr_CompressionType</a> </td> <td class="paramname"><em>compression_type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__checksum.html#ga36a5d391d81917afca751eb71514f2cf">cr_ChecksumType</a> </td> <td class="paramname"><em>checksum_type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>delsrc</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Function to prepare a new <a class="el" href="structcr___compression_task.html">cr_CompressionTask</a>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">src</td><td>Source filename. </td></tr> <tr><td class="paramname">dst</td><td>Destination filename or NULL (then src+compression suffix will be used). </td></tr> <tr><td class="paramname">compression_type</td><td>Type of compression to use. </td></tr> <tr><td class="paramname">checksum_type</td><td>Checksum type for stat calculation. Note: Stat is always use. If you don't need a stats use CR_CHECKSUM_UNKNOWN, then no checksum calculation will be performed, only size would be calculated. Don't be afraid, size calculation has almost no overhead. </td></tr> <tr><td class="paramname">delsrc</td><td>Delete src after successuful compression. 0 = Do not delete, delete otherwise </td></tr> <tr><td class="paramname">err</td><td>GError **. Note: This is a GError for the cr_compresiontask_new function. The GError that will be at created <a class="el" href="structcr___compression_task.html">cr_CompressionTask</a> is different. </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>New <a class="el" href="structcr___compression_task.html">cr_CompressionTask</a>. </dd></dl> </div> </div> <a class="anchor" id="ga90ed36889e6d93f9a2648b9ba765c152"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_repomd_record_fill_thread </td> <td>(</td> <td class="paramtype">gpointer </td> <td class="paramname"><em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">gpointer </td> <td class="paramname"><em>user_data</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Function for GThread Pool. </p> </div> </div> <a class="anchor" id="gae55faf77725052d0d2ea91bd2dae272d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_repomdrecordfilltask_free </td> <td>(</td> <td class="paramtype"><a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a> * </td> <td class="paramname"><em>task</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Frees <a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a> </p> </div> </div> <a class="anchor" id="ga285e161887d250a5f8cd98af93d2ff60"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a>* cr_repomdrecordfilltask_new </td> <td>(</td> <td class="paramtype"><a class="el" href="structcr___repomd_record.html">cr_RepomdRecord</a> * </td> <td class="paramname"><em>record</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__checksum.html#ga36a5d391d81917afca751eb71514f2cf">cr_ChecksumType</a> </td> <td class="paramname"><em>checksum_type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Function to prepare a new <a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">record</td><td><a class="el" href="structcr___repomd_record.html">cr_RepomdRecord</a>. </td></tr> <tr><td class="paramname">checksum_type</td><td>Type of checksum. </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>New <a class="el" href="structcr___repomd_record_fill_task.html">cr_RepomdRecordFillTask</a>. </dd></dl> </div> </div> </div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="footer">Generated on Tue Nov 11 2014 15:15:01 for createrepo_c library by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li> </ul> </div> </body> </html>