Prechádzať zdrojové kódy

Kernel: Make PerformanceEventBuffer::to_json() return a KResult

There's a ton of things inside to_json() that could go wrong but we
don't know about it yet. One step at a time.
Andreas Kling 3 rokov pred
rodič
commit
905065f8c8

+ 1 - 5
Kernel/GlobalProcessExposed.cpp

@@ -721,11 +721,7 @@ private:
     {
         if (!g_global_perf_events)
             return ENOENT;
-
-        // FIXME: to_json() should return a better error.
-        if (!g_global_perf_events->to_json(builder))
-            return ENOMEM;
-
+        TRY(g_global_perf_events->to_json(builder));
         return KSuccess;
     }
 };

+ 3 - 3
Kernel/PerformanceEventBuffer.cpp

@@ -164,7 +164,7 @@ PerformanceEvent& PerformanceEventBuffer::at(size_t index)
 }
 
 template<typename Serializer>
-bool PerformanceEventBuffer::to_json_impl(Serializer& object) const
+KResult PerformanceEventBuffer::to_json_impl(Serializer& object) const
 {
     {
         auto strings = object.add_array("strings");
@@ -263,10 +263,10 @@ bool PerformanceEventBuffer::to_json_impl(Serializer& object) const
     }
     array.finish();
     object.finish();
-    return true;
+    return KSuccess;
 }
 
-bool PerformanceEventBuffer::to_json(KBufferBuilder& builder) const
+KResult PerformanceEventBuffer::to_json(KBufferBuilder& builder) const
 {
     JsonObjectSerializer object(builder);
     return to_json_impl(object);

+ 2 - 2
Kernel/PerformanceEventBuffer.h

@@ -116,7 +116,7 @@ public:
         return const_cast<PerformanceEventBuffer&>(*this).at(index);
     }
 
-    bool to_json(KBufferBuilder&) const;
+    KResult to_json(KBufferBuilder&) const;
 
     void add_process(const Process&, ProcessEventType event_type);
 
@@ -126,7 +126,7 @@ private:
     explicit PerformanceEventBuffer(NonnullOwnPtr<KBuffer>);
 
     template<typename Serializer>
-    bool to_json_impl(Serializer&) const;
+    KResult to_json_impl(Serializer&) const;
 
     PerformanceEvent& at(size_t index);
 

+ 1 - 1
Kernel/Process.cpp

@@ -581,7 +581,7 @@ bool Process::dump_perfcore()
         return false;
     }
     auto builder = builder_or_error.release_value();
-    if (!m_perf_event_buffer->to_json(builder)) {
+    if (m_perf_event_buffer->to_json(builder).is_error()) {
         dbgln("Failed to generate perfcore for pid {}: Could not serialize performance events to JSON.", pid().value());
         return false;
     }

+ 1 - 1
Kernel/ProcessSpecificExposed.cpp

@@ -166,7 +166,7 @@ KResult Process::procfs_get_perf_events(KBufferBuilder& builder) const
         dbgln("ProcFS: No perf events for {}", pid());
         return KResult(ENOBUFS);
     }
-    return perf_events()->to_json(builder) ? KSuccess : KResult(EINVAL);
+    return perf_events()->to_json(builder);
 }
 
 KResult Process::procfs_get_fds_stats(KBufferBuilder& builder) const