SharedBuffer.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <AK/kmalloc.h>
  2. #include <SharedBuffer.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. RefPtr<SharedBuffer> SharedBuffer::create_with_size(int size)
  6. {
  7. void* data;
  8. int shared_buffer_id = create_shared_buffer(size, &data);
  9. if (shared_buffer_id < 0) {
  10. perror("create_shared_buffer");
  11. return nullptr;
  12. }
  13. return adopt(*new SharedBuffer(shared_buffer_id, size, data));
  14. }
  15. bool SharedBuffer::share_with(pid_t peer)
  16. {
  17. int ret = share_buffer_with(shared_buffer_id(), peer);
  18. if (ret < 0) {
  19. perror("share_buffer_with");
  20. return false;
  21. }
  22. return true;
  23. }
  24. RefPtr<SharedBuffer> SharedBuffer::create_from_shared_buffer_id(int shared_buffer_id)
  25. {
  26. void* data = get_shared_buffer(shared_buffer_id);
  27. if (data == (void*)-1) {
  28. perror("get_shared_buffer");
  29. return nullptr;
  30. }
  31. int size = get_shared_buffer_size(shared_buffer_id);
  32. if (size < 0) {
  33. perror("get_shared_buffer_size");
  34. return nullptr;
  35. }
  36. return adopt(*new SharedBuffer(shared_buffer_id, size, data));
  37. }
  38. SharedBuffer::SharedBuffer(int shared_buffer_id, int size, void* data)
  39. : m_shared_buffer_id(shared_buffer_id)
  40. , m_size(size)
  41. , m_data(data)
  42. {
  43. }
  44. SharedBuffer::~SharedBuffer()
  45. {
  46. if (m_shared_buffer_id >= 0) {
  47. int rc = release_shared_buffer(m_shared_buffer_id);
  48. if (rc < 0) {
  49. perror("release_shared_buffer");
  50. }
  51. }
  52. }
  53. void SharedBuffer::seal()
  54. {
  55. int rc = seal_shared_buffer(m_shared_buffer_id);
  56. if (rc < 0) {
  57. perror("seal_shared_buffer");
  58. ASSERT_NOT_REACHED();
  59. }
  60. }