| Main index | Section 9 | Options |
#include <geom/geom.h>
The g_detach() function detaches given consumer cp from its corresponding provider, tearing down the communication channel between them.
| The consumer must not be attached to a provider. | |
| The operation must not create a topology loop. | |
| The topology lock has to be held. | |
g_detach():
| The consumer has to be attached. | |
| The access count has to be 0. | |
| There must be no active requests. | |
| The topology lock has to be held. | |
void
some_function(struct g_geom *mygeom, struct g_provider *pp)
{
struct g_consumer *cp;
g_topology_assert();
/* Create new consumer on 'mygeom' geom. */
cp = g_new_consumer(mygeom);
/* Attach newly created consumer to given provider. */
if (g_attach(cp, pp) != 0) {
g_destroy_consumer(cp);
return;
}
/* Open provider for reading through our consumer. */
if (g_access(cp, 1, 0, 0) != 0) {
g_detach(cp);
g_destroy_consumer(cp);
return;
}
g_topology_unlock();
/*
* Read data from provider.
*/
g_topology_lock();
/* Disconnect from provider (release access count). */
g_access(cp, -1, 0, 0);
/* Detach from provider. */
g_detach(cp);
/* Destroy consumer. */
g_destroy_consumer(cp);
}
| [ELOOP] | |
| The operation creates a topology loop. | |
| [ENXIO] | |
| Provider got orphaned. | |
| G_ATTACH (9) | October 10, 2020 |
| Main index | Section 9 | Options |
Please direct any comments about this manual page service to Ben Bullock. Privacy policy.
| “ | Do you laugh when the waiter drops a tray full of dishes? Unix weenies do. They're the first ones to laugh at hapless users, trying to figure out an error message that doesn't have anything to do with what they just typed. | ” |
| — The Unix Haters' handbook | ||