X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgasyncresult.c;h=0c18b0b40870b877f07f95c1c9256940f391e9a1;hb=356a3987cee7ceddcb3fe623edf0bd2881895add;hp=a989b4853e6ae2964d0b8dc2689d0dfe08ff37b2;hpb=74af99b860db66d6e32ed12c54016246e60be99a;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gasyncresult.c b/gio/gasyncresult.c index a989b48..0c18b0b 100644 --- a/gio/gasyncresult.c +++ b/gio/gasyncresult.c @@ -13,24 +13,22 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. + * Public License along with this library; if not, see . * * Author: Alexander Larsson */ #include "config.h" #include "gasyncresult.h" +#include "gsimpleasyncresult.h" #include "glibintl.h" -#include "gioalias.h" /** * SECTION:gasyncresult * @short_description: Asynchronous Function Results * @include: gio/gio.h - * @see_also: #GSimpleAsyncResult + * @see_also: #GTask * * Provides a base class for implementing asynchronous function results. * @@ -42,25 +40,27 @@ * filled with the details of the operation's success or failure, the * object the asynchronous function was started for and any error codes * returned. The asynchronous callback function is then expected to call - * the corresponding "_finish()" function with the object the function - * was called for, and the #GAsyncResult instance, and optionally, + * the corresponding "_finish()" function, passing the object the + * function was called for, the #GAsyncResult instance, and (optionally) * an @error to grab any error conditions that may have occurred. * - * The purpose of the "_finish()" function is to take the generic - * result of type #GAsyncResult and return the specific result - * that the operation in question yields (e.g. a #GFileEnumerator for - * a "enumerate children" operation). If the result or error status - * of the operation is not needed, there is no need to call the - * "_finish()" function, GIO will take care of cleaning up the - * result and error information after the #GAsyncReadyCallback - * returns. It is also allowed to take a reference to the #GAsyncResult - * and call "_finish()" later. + * The "_finish()" function for an operation takes the generic result + * (of type #GAsyncResult) and returns the specific result that the + * operation in question yields (e.g. a #GFileEnumerator for a + * "enumerate children" operation). If the result or error status of the + * operation is not needed, there is no need to call the "_finish()" + * function; GIO will take care of cleaning up the result and error + * information after the #GAsyncReadyCallback returns. You can pass + * %NULL for the #GAsyncReadyCallback if you don't need to take any + * action at all after the operation completes. Applications may also + * take a reference to the #GAsyncResult and call "_finish()" later; + * however, the "_finish()" function may be called at most once. * * Example of a typical asynchronous operation flow: - * |[ + * |[ * void _theoretical_frobnitz_async (Theoretical *t, * GCancellable *c, - * GAsyncReadyCallback *cb, + * GAsyncReadyCallback cb, * gpointer u); * * gboolean _theoretical_frobnitz_finish (Theoretical *t, @@ -81,20 +81,20 @@ * else * g_printf ("Uh oh!\n"); * - * /* ... */ + * ... * * } * * int main (int argc, void *argv[]) * { - * /* ... */ + * ... * * _theoretical_frobnitz_async (theoretical_data, * NULL, * frobnitz_result_func, * NULL); * - * /* ... */ + * ... * } * ]| * @@ -102,12 +102,16 @@ * always called, even in the case of a cancelled operation. On cancellation * the result is a %G_IO_ERROR_CANCELLED error. * - * Some asynchronous operations are implemented using synchronous calls. - * These are run in a separate thread, if #GThread has been initialized, but - * otherwise they are sent to the Main Event Loop and processed in an idle - * function. So, if you truly need asynchronous operations, make sure to - * initialize #GThread. - **/ + * ## I/O Priority # {#io-priority} + * + * Many I/O-related asynchronous operations have a priority parameter, + * which is used in certain cases to determine the order in which + * operations are executed. They are not used to determine system-wide + * I/O scheduling. Priorities are integers, with lower numbers indicating + * higher priority. It is recommended to choose priorities between + * %G_PRIORITY_LOW and %G_PRIORITY_HIGH, with %G_PRIORITY_DEFAULT + * as a default. + */ typedef GAsyncResultIface GAsyncResultInterface; G_DEFINE_INTERFACE (GAsyncResult, g_async_result, G_TYPE_OBJECT) @@ -123,7 +127,7 @@ g_async_result_default_init (GAsyncResultInterface *iface) * * Gets the user data from a #GAsyncResult. * - * Returns: the user data for @res. + * Returns: (transfer full): the user data for @res. **/ gpointer g_async_result_get_user_data (GAsyncResult *res) @@ -143,7 +147,7 @@ g_async_result_get_user_data (GAsyncResult *res) * * Gets the source object from a #GAsyncResult. * - * Returns: a new reference to the source object for the @res, + * Returns: (transfer full): a new reference to the source object for the @res, * or %NULL if there is none. */ GObject * @@ -158,5 +162,71 @@ g_async_result_get_source_object (GAsyncResult *res) return (* iface->get_source_object) (res); } -#define __G_ASYNC_RESULT_C__ -#include "gioaliasdef.c" +/** + * g_async_result_legacy_propagate_error: + * @res: a #GAsyncResult + * @error: (out): a location to propagate the error to. + * + * If @res is a #GSimpleAsyncResult, this is equivalent to + * g_simple_async_result_propagate_error(). Otherwise it returns + * %FALSE. + * + * This can be used for legacy error handling in async *_finish() + * wrapper functions that traditionally handled #GSimpleAsyncResult + * error returns themselves rather than calling into the virtual method. + * This should not be used in new code; #GAsyncResult errors that are + * set by virtual methods should also be extracted by virtual methods, + * to enable subclasses to chain up correctly. + * + * Returns: %TRUE if @error is has been filled in with an error from + * @res, %FALSE if not. + * + * Since: 2.34 + **/ +gboolean +g_async_result_legacy_propagate_error (GAsyncResult *res, + GError **error) +{ + /* This doesn't use a vmethod, because it's only for code that used + * to use GSimpleAsyncResult. (But it's a GAsyncResult method so + * that callers don't need to worry about GSimpleAsyncResult + * deprecation warnings in the future.) + */ + + if (G_IS_SIMPLE_ASYNC_RESULT (res)) + { + return g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), + error); + } + else + return FALSE; +} + +/** + * g_async_result_is_tagged: + * @res: a #GAsyncResult + * @source_tag: an application-defined tag + * + * Checks if @res has the given @source_tag (generally a function + * pointer indicating the function @res was created by). + * + * Returns: %TRUE if @res has the indicated @source_tag, %FALSE if + * not. + * + * Since: 2.34 + **/ +gboolean +g_async_result_is_tagged (GAsyncResult *res, + gpointer source_tag) +{ + GAsyncResultIface *iface; + + g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE); + + iface = G_ASYNC_RESULT_GET_IFACE (res); + + if (!iface->is_tagged) + return FALSE; + + return (* iface->is_tagged) (res, source_tag); +}