#include #include #include #include #include #include "shm.h" int main(void) { struct share_data *data; int rv; if (create_share() != 0) return 1; data = get_share(); if (!data) return 1; init_share(data); if (pthread_mutex_lock(&data->m) != 0) return 1; printf("recv (%d): waiting for signal\n", getpid()); do { rv = pthread_cond_wait(&data->c, &data->m); if (rv != 0) { if (rv == EOWNERDEAD) { printf("recv(%d): recover mutex\n", getpid()); data->msg[0] = 0; pthread_mutex_consistent(&data->m); } else { /* maybe rv == ENOTRECOVERABLE */ return 1; } } } while (rv != 0); /* set "received" uprobe here */ printf("recv (%d): received signal: %s\n", getpid(), data->msg); pthread_mutex_unlock(&data->m); remove_share(); return 0; }