diff options
author | px4dev <px4@purgatory.org> | 2013-01-11 02:14:43 -0800 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2013-01-11 02:14:43 -0800 |
commit | f127495caa2d45a1b1fff3be7a9d3756259d23e2 (patch) | |
tree | 91daf599eae326f2207d0fbd9ede34b51eca1812 /nuttx/graphics/nxmu/nx_bitmap.c | |
parent | 48c5d63319be3b8da7c4cd598d2a31dceae842a7 (diff) | |
download | px4-firmware-f127495caa2d45a1b1fff3be7a9d3756259d23e2.tar.gz px4-firmware-f127495caa2d45a1b1fff3be7a9d3756259d23e2.tar.bz2 px4-firmware-f127495caa2d45a1b1fff3be7a9d3756259d23e2.zip |
Manually fixup merge botches via direct comparison with NuttX r5447.
Diffstat (limited to 'nuttx/graphics/nxmu/nx_bitmap.c')
-rw-r--r-- | nuttx/graphics/nxmu/nx_bitmap.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/nuttx/graphics/nxmu/nx_bitmap.c b/nuttx/graphics/nxmu/nx_bitmap.c index a86eda96a..a0bd748b0 100644 --- a/nuttx/graphics/nxmu/nx_bitmap.c +++ b/nuttx/graphics/nxmu/nx_bitmap.c @@ -100,6 +100,8 @@ int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest, FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd; struct nxsvrmsg_bitmap_s outmsg; int i; + int ret; + sem_t sem_done; #ifdef CONFIG_DEBUG if (!wnd || !dest || !src || !origin) @@ -124,7 +126,32 @@ int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest, outmsg.origin.y = origin->y; nxgl_rectcopy(&outmsg.dest, dest); + + /* Create a semaphore for tracking command completion */ + + outmsg.sem_done = &sem_done; + ret = sem_init(&sem_done, 0, 0); + + if (ret != OK) + { + gdbg("sem_init failed: %d\n", errno); + return ret; + } + /* Forward the fill command to the server */ - return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_bitmap_s)); + ret = nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_bitmap_s)); + + /* Wait that the command is completed, so that caller can release the buffer. */ + + if (ret == OK) + { + ret = sem_wait(&sem_done); + } + + /* Destroy the semaphore and return. */ + + sem_destroy(&sem_done); + + return ret; } |